BackgroundWorker.CancelAsync()が動作しない問題が発生しています。 WorkerSupportsCancellationをTRUEに設定しました。 DoWorkでBackgroundWorker1.CancellationPendingもポーリングしています。ここで私が達成しようとしているもののサンプルコードです。バックグラウンドワーカーは、タイムスタンプをループし、Measurement変数に値を割り当てています。私は最後に報告された測定変数を照会し、リストボックスに書き込むサブルーチンを持っています。 5回のループの後、私はBackgroundWorker.CancelAsync()を送ります。キャンセルが保留中であることがわかりますが、実際にバックグラウンドワーカーをキャンセルするわけではありません。これは競争状態ですか?vb.netバックグラウンドワーカーが動作しない
Public Class Form1
Dim Measurement As String
Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
BackgroundWorker1.RunWorkerAsync()
Delay(0.5)
For x = 1 To 5
ListBox1.Items.Add(Measurement)
ListBox1.TopIndex = ListBox1.Items.Count - 1
TextBox1.Text = BackgroundWorker1.CancellationPending
Delay(1)
Next
BackgroundWorker1.CancelAsync()
TextBox1.Text = BackgroundWorker1.CancellationPending
ListBox1.Items.Add("Cancel Pend: " & BackgroundWorker1.CancellationPending)
Delay(5)
ListBox1.Items.Add("Busy: " & BackgroundWorker1.IsBusy)
End Sub
Private Sub BackgroundWorker1_DoWork(sender As System.Object, e As System.ComponentModel.DoWorkEventArgs) Handles BackgroundWorker1.DoWork
If BackgroundWorker1.CancellationPending = True Then
e.Cancel = True
BackgroundWorker1.Dispose()
Exit Sub
Else
Do
Measurement = Now()
Loop
End If
End Sub
エンドクラス
ループ内のキャンセルの確認を移動(またはコピー)します – Steve
うわー...私はそれを逃したとは信じられません...スティーブありがとう! – HurstOlds
@HurstOldsもう一度ボタンをクリックするとどうなりますか? 'BackgroundWorker1.Dispose()'がその場所にある場合...私は何が起こるか知っています:) – Codexer