BackgroundWorker.CancelAsync() çalışmıyor bir sorun yaşıyorum. WorkerSupportsCancellation, TRUE olarak ayarlanmış. Ayrıca DoWork'ta BackgroundWorker1.CancellationPending'i okuyorum. İşte elde etmeye çalıştığım şeyin örnek kodudur. Zaman damgasıyla döngü yapan ve Ölçüm değişkenine bir değer atan arka plan çalışanım var. Son bildirilen Ölçüm değişkenini sorgulayan ve liste kutusuna yazan bir altprogramım var. 5 döngüden sonra BackgroundWorker.CancelAsync() yolladım. İptalin beklemede olduğunu görebiliyorum, ancak aslında arka plan işçisini iptal etmiyor. Bu bir yarış durumu mu?vb.net background background çalışmıyor
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
End Class
Döngünün içindeki iptalin çekini kontrol edin (veya kopyalayın) – Steve
Wow ... bunu kaçırdığıma inanamıyorum ... teşekkürler Steve! – HurstOlds
@HurstOlds Düğmenizi tekrar tıkladığınızda ne olur? Eğer oradaki BackgroundWorker1.Dispose() 'ise ... ne olduğunu biliyorum :) – Codexer