我是新锐的。 我创建了一个Windows窗体应用程序。 我的申请工作正常。 我想在运行时取消BackgroundWorker。我的意思是我想完全停止BackgroundWorker流程。 我正在使用此代码取消该应用程序, 1)首先我用了
private void exitToolStripMenuItem_Click(object sender, EventArgs e)
{
this.Dispose();
}
但它并没有停止。然后我用了
private void exitToolStripMenuItem_Click(object sender, EventArgs e)
{
bgBackfill1.CancelAsync();
this.Dispose();
}
但是当我退出应用程序时,它会将文件写入G:\ Drive。 任何人都可以请我说如何停止在G:\ Drive中写入文件并完全停止BackgroundWorker流程。
谢谢,如果有人帮助我。
答案 0 :(得分:5)
Backgroundworkers工人方法必须知道有取消待处理,所以只有它才能取消。
private void bw_DoWork(object sender, DoWorkEventArgs e)
{
BackgroundWorker worker = sender as BackgroundWorker;
for (int i = 1; (i <= 10); i++)
{
if ((worker.CancellationPending == true))
{
e.Cancel = true;
break;
}
else
{
// Perform a time consuming operation and report progress.
System.Threading.Thread.Sleep(500);
worker.ReportProgress((i * 10));
}
}
}
因此,当您设置CancelAsync时,您可以设置Cancellation pending。但是您还需要为该属性注意DoWork方法 - 尽快取消工作。请参阅MSDN上的示例。
答案 1 :(得分:3)
在你的“DoWork”例程中,你可以使用worker1.CancellationPending检查工作线程(让我们称之为worker1),如果它是真的,那么如果你在你的itterative代码中测试它,那么它试图被取消显然停止继续处理,并在最后设置e.Cancel = true,您将成功检查并处理取消后台工作人员。
答案 2 :(得分:1)
您的Backgroundworker必须编程为可取消。首先将工人设置为可取消:
var bg= new BackgroundWorker();
bg.WorkerSupportsCancellation = true;
然后在你的工作循环中检查CancellationPending
类的BackgroundWorker
标志,看看你应该何时退出循环。
答案 3 :(得分:1)
初始化BackgroundWorker
组件时,以及拨打RunWorkerAsync
之前,您必须设置WorkerSupportsCancellation属性。所以,例如:
MyWorker = new BackgroundWorker();
MyWorker.WorkerSupportsCancellation = true;
MyWorker.WorkerReportsProgress = true;
MyWorker.DoWork += DoWorkEventHandler;
MyWorker.ProgressChanged += WorkerProgressChanged;
MyWorker.RunWorkerAsync();