åbne form fra en anden thread (tror jeg)
Hej jeg bruger følgende kode til at logge hver bruger på en slags chatserver hvorfra jeg kan sende kommandoer ud til hver client:Imports System.Net.Sockets
Imports System.IO
Public Class CommandClient
Dim Grid As GridEX = Form1.GridEX
'---get own IP address
Dim ips As Net.IPHostEntry = Net.Dns.Resolve(Net.Dns.GetHostName())
'---port nos and server IP address
Const PORTNO As Integer = 501
Const SERVERIP As String = "10.11.10.50"
Dim client As TcpClient
'--used for sending and receiving data
Dim data() As Byte
'---Sends the message to the server
Public Sub SendMessage(ByVal message As String)
Try
'---send the text
Dim ns As System.Net.Sockets.NetworkStream
'client.NoDelay = True
SyncLock client.GetStream
ns = client.GetStream
Dim bytesToSend As Byte() = _
System.Text.Encoding.ASCII.GetBytes(message)
'---sends the text---
ns.Write(bytesToSend, 0, bytesToSend.Length)
ns.Flush()
End SyncLock
Catch ex As Exception
MsgBox(ex.ToString)
End Try
End Sub
'---Receives a message from the server
Public Sub ReceiveMessage(ByVal ar As IAsyncResult)
Try
Dim bytesRead As Integer
bytesRead = client.GetStream.EndRead(ar)
If bytesRead < 1 Then
Exit Sub
Else
Dim messageReceived As String = _
System.Text.Encoding.ASCII.GetString( _
data, 0, bytesRead)
'---update the message history
Dim para() As Object = {messageReceived}
'Me.Invoke(New delUpdateHistory(AddressOf Me.UpdateHistory), para)
Me.HandleCommand(messageReceived)
End If
'---continue reading for more data
client.GetStream.BeginRead(data, 0, _
CInt(client.ReceiveBufferSize), _
AddressOf ReceiveMessage, Nothing)
Catch ex As Exception
' MsgBox(ex.ToString)
End Try
End Sub
Public Sub HandleCommand(ByVal str As String)
Try
Select Case str.ToUpper.Trim
Case "HITRATE_UPDATE"
Select Case Grid.SelectedLayout
Case GridEX.GridEXLayout.Hitrate_DAT, GridEX.GridEXLayout.Hitrate_DER, GridEX.GridEXLayout.Hitrate_Montor_DAT, GridEX.GridEXLayout.Hitrate_NO, GridEX.GridEXLayout.Hitrate_SE
Grid.RefreshCurrentData()
End Select
Case "ITSMS_NEWTASKADDED"
Select Case Grid.SelectedLayout
Case GridEX.GridEXLayout.IT_Tasks, GridEX.GridEXLayout.IT_Tasks
Grid.RefreshCurrentData()
'Util.ShowBalloonTip("IT-SMS", "A new task was just added...", 10, ToolTipIcon.Info)
End Select
Case "CHAT_START"
Util.OpenITChatClient()
End Select
Catch exp As Exception
Throw exp
End Try
End Sub
Public Sub SignIN()
'---Sign in to the server
Try
client = New TcpClient
' client.NoDelay = True
'---connect to the server
client.Connect(SERVERIP, PORTNO)
ReDim data(client.ReceiveBufferSize - 1)
'---inform the server of your nick name---
' e.g. [Join][User1]
SendMessage("[Join][" & GlobalSettings.CurrentUser & "]")
'---begin reading data asynchronously from the server
client.GetStream.BeginRead( _
data, 0, CInt(client.ReceiveBufferSize), _
AddressOf ReceiveMessage, Nothing)
'---get all users connected
' e.g. [Usrs]
System.Threading.Thread.Sleep(500)
SendMessage("[Usrs]")
Catch ex As Exception
MsgBox(ex.ToString)
End Try
End Sub
'---disconnect from the server
Public Sub Disconnect()
Try
client.GetStream.Close()
client.Close()
Catch ex As Exception
End Try
End Sub
Public Sub New()
SignIN()
End Sub
End Class
....når jeg kalder util.OpenITChatClient og Util.ShowBaloonTip i HandleCommand sub'en så går programmet i sort.... Nogen der ved hvad jeg kan gøre.
Util-filen:
Public Shared Sub OpenITChatClient(Optional ByVal Focus As Boolean = True)
Dim f As Form = LiveChat
Dim IsItChatClientOpen As Boolean = False
Dim frm As Form
For Each frm In Application.OpenForms
If frm Is f Then
IsItChatClientOpen = True
Exit For
End If
Next
If IsItChatClientOpen = False Then
f.Show()
Else
If Focus = True Then
f.Focus()
End If
End If
End Sub
Public Shared Sub ShowBalloonTip(ByVal Title As String, ByVal Text As String, ByVal TimeOut As Integer, ByVal Icon As System.Windows.Forms.ToolTipIcon)
Form1.NotifyIcon.ShowBalloonTip(TimeOut, Title, Text, Icon)
End Sub