Avatar billede agerled Nybegynder
21. februar 2006 - 07:26

å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
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester