デリゲートと呼び出しの仕組みを理解しようとしています。vb.netデリゲートと呼び出し - マルチスレッド
私はラベルとボタンでフォームを作成します。
ボタンをクリックすると、テキストが「停止」に変わり、カウンタがカウントアップを開始します。このカウンターはラベルに表示する必要があります。これは私のコードです:
Public Class Form1
Private t1 As Thread
Private sek_ As Integer = 0
Private Sub btn_read_Click(sender As Object, e As EventArgs) Handles btn_read.Click
If btn_read.Text = "Read" Then
btn_read.Text = "Stop"
t1 = New Thread(AddressOf stopw_)
t1.Start()
Else
lbl_stopw_.Text = ""
btn_read.Text = "Read"
End If
End Sub
Private Delegate Sub stopw_D()
Private Sub stopw_()
Do While btn_read.Text = "Stop"
sek_ = sek_ + 1
If lbl_stopw_.InvokeRequired Then
lbl_stopw_.Invoke(New stopw_D(AddressOf stopw_))
Else
lbl_stopw_.Text = sek_
End If
Thread.Sleep(1000)
Loop
sek_ = 0
If t1.IsAlive Then t1.Abort()
End Sub
End Class
デバッグを開始しても、フォームはフリーズし、ラベルは更新されません。デリゲートをすべて削除して何かを呼び出す場合は、Me.CheckForIllegalCrossThreadCalls = False
の作業が必要です。
私は間違っていますか?
Invoke()呼び出しがかなり間違っています。 * firehose *バグをトリガーすると、UIスレッドはこれらの呼び出しを処理することはできません。もう少しお待ちください。このサイトの名前が表示されます。 BackgroundWorkerを使用して成功のピットに落ちる。 –