Bằng cách dừng lại, bạn có thực sự muốn dừng hoặc bạn có nghĩa là tạm dừng không? Nếu bạn muốn dừng lại, thì đây là một miếng bánh. Tạo nút xử lý sự kiện nhấn nút cho nút bạn muốn chịu trách nhiệm khởi động công nhân nền và trình xử lý sự kiện nhấn nút cho người chịu trách nhiệm dừng nó. Trên nút bắt đầu của bạn, thực hiện cuộc gọi đến phương thức nhân viên nền để kích hoạt sự kiện do_work. Một cái gì đó như thế này:
private void startButton_Click(System.Object sender,
System.EventArgs e)
{
// Start the asynchronous operation.
backgroundWorker1.RunWorkerAsync();
}
Mở nút dừng của bạn, thực hiện cuộc gọi đến các phương pháp mà bộ công nhân nền của CancellationPending
true, như thế này:
private void cancelAsyncButton_Click(System.Object sender,
System.EventArgs e)
{
// Cancel the asynchronous operation.
this.backgroundWorker1.CancelAsync();
}
Bây giờ đừng quên để kiểm tra sự CancelationPending
cờ bên trong doWork của nhân viên nền của bạn. Một cái gì đó như thế này:
private void KillZombies(BackgroundWorker worker, DoWorkEventArgs e)
{
while (true)
{
if (worker.CancellationPending)
{
e.Cancel = true;
}
}
}
Và phương pháp DoWork của bạn:
private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
{
BackgroundWorker worker = sender as BackgroundWorker;
KillZombies(worker, e);
}
Tôi hy vọng điều này có thể hướng bạn đi đúng hướng. Một số bài đọc thêm:
http://msdn.microsoft.com/en-us/library/b2zk6580(v=VS.90).aspx
http://msdn.microsoft.com/en-us/library/system.componentmodel.backgroundworker.aspx
http://msdn.microsoft.com/en-us/library/waw3xexc.aspx
Hmm, cho câu trả lời bạn được chấp nhận, hãy cẩn thận - bạn đang lo lắng tất cả về ảnh hưởng đó sẽ chỉ gây ra nó không dừng lại một lần lặp hoặc hai sau đó, nhưng quên rằng bạn sẽ BẮT BUỘC lên một bộ vi xử lý toàn bộ chỉ cần quay! Ít nhất hãy ngủ trong đó. Nó sẽ có vẻ như nó hoạt động nhưng gây thiệt hại lớn.Một số câu trả lời khác giải quyết tất cả những vấn đề đó theo cách mà bạn đang 'giả sử' để giải quyết chúng. – FastAl