Hallo zusammen,
ich habe mal wieder ein Problem:
Und zwar habe ich eine Client-Server-Anwendung in .NET geschrieben, mit der man über das Netzwerk kommunzierten werden soll. Das klappt auch so weit gut. Jedoch scheitere ich an dem Vorhaben, bei Empfang einer bestimmten Nachricht ein neues Formular anzuzeigen.
Mein Code (Client, Ausschnitt):
[...]
Public Function Connect()
' Verbinden
Try
InitSettingsManager()
' TCP-Verbindung aufbauen
Client = New TcpClient("localhost", PORT_NUM)
' Lesen starten
Client.GetStream.BeginRead(ReadBuffer, 0, READ_BUFFER_SIZE, _
AddressOf DoRead, Nothing)
' Anmelden
AttemptLogin()
Catch Ex As Exception
MarkAsDisconnected()
End Try
End Function
Private Sub DoRead(ByVal ar As IAsyncResult)
Dim BytesRead As Integer
Dim strMessage As String
Try
' Finish asynchronous read into readBuffer and return number of
' bytes read.
BytesRead = Client.GetStream.EndRead(ar)
If BytesRead < 1 Then
' If no bytes were read server has close. Disable input window.
MarkAsDisconnected()
Exit Sub
End If
' Convert the byte array the message was saved into, minus two for
' the
' Chr(13) and Chr(10)
strMessage = Encoding.ASCII.GetString(ReadBuffer, 0, BytesRead)
nochmal:
For i As Long = 1 To Len(strMessage)
' Nun die Chr(13) und Chr(10) Zeichen finden
If Mid(strMessage, i, 1) = Chr(13) Then
ProcessCommands(Mid(strMessage, 1, i - 1))
If Trim(strMessage) <> "" Then
strMessage = Replace(strMessage, Left(strMessage, i - _
1), "", , , CompareMethod.Text)
Else
Exit For
End If
If Len(strMessage) > 4 Then GoTo nochmal
End If
Next
' Start a new asynchronous read into readBuffer.
Client.GetStream.BeginRead(ReadBuffer, 0, READ_BUFFER_SIZE, _
AddressOf DoRead, Nothing)
Catch e As Exception
MarkAsDisconnected()
End Try
End Sub
Private Sub ProcessCommands(ByVal strMessage As String)
Dim dataArray() As String
' Befehl spliten (|)
dataArray = strMessage.Split(Chr(124))
' Befehle ermitteln
Select Case dataArray(0)
[...]
Case "CHAT"
DisplayText(dataArray(1), dataArray(2))
End Select
End Sub
Private Sub DisplayText(ByVal User As String, ByVal Text As String)
' Meldung ist angekommen
With New frmChat
.Show()
.AddMessage(User, Text)
.Focus()
End With
End Sub Wenn nun der Client den Befehl CHAT bekommt, wird das Fenster geöffnet. Doch es hängt sich auf. Warum?
Kennt jemand eine Lösung für das Problem?
Alexander
http://www.planet-source.de - http://www.alexosoft.de |