私はメインスレッドにリッチテキストボックスを用意しています。私は呼び出しを使用してこれを実行しようとしましたが、動作させることができません。私はそれをしようとした場合:別のスレッドからUI要素にアクセスしようとしているVB.netが動作していません
If InvokeRequired Then
Dim Dgate As writeLogDelegate = New writeLogDelegate(AddressOf writeLog)
BeginInvoke(Dgate, New Object() {Message})
Else
RTB_Log.AppendText(Message)
End If
その後、InvokeRequiredはtrue
それが必要とハンドルが戻りfalse
を作成しているかどうかのチェックなどを返しませんが、私はをIsHandleCreated の値を取得する場合、フォームのロード時に、それはtrue
を返します。 。
Threadクラスの抜粋:
Public Sub startClientPoll(ByRef Sender As TcpListener)
Dim TThread As New Thread(New ParameterizedThreadStart(AddressOf pollClientConnect))
TThread.Start(Sender)
End Sub
Private Sub pollClientConnect(tcplistener As TcpListener)
Do
If tcplistener.Pending() Then
'MessageBox.Show("")
RaiseEvent clientConnecting()
End If
Loop Until Ended = True
End Sub
イベントハンドラクラスの抜粋:
Private Sub client_Connect() Handles listenerSocket.clientConnecting
Form1.writeLog("New client awaiting accept" & vbNewLine)
Dim clientSocket As TcpClient = listenerSocket.AcceptTcpClient()
Dim clientHandler As New MPClientReciever(clientSocket)
End Sub
メインフォームスニペット:
Public Sub writeLog(ByVal Message As String)
If Not IsHandleCreated Then
CreateControl()
End If
If InvokeRequired Then
Dim Dgate As writeLogDelegate = New writeLogDelegate(AddressOf writeLog)
BeginInvoke(Dgate, New Object() {Message})
Else
RTB_Log.AppendText(Message)
End If
End Sub
'Form1.writeLogを持つ任意のコントロールで、この
Function
を使用することができます...'デフォルトのように見えるものスレッドでうまくやっていないフォームインスタンス – Plutonixこれがあれば、より良い方法がありますか? – Champgoblem2
バックグラウンドスレッドで 'CreateConrol()'コントロールを作成していますか? – LarsTech