问题描述
|
我是夏普新手。
我创建了一个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进程。
谢谢有人帮助我。
解决方法
Backgroundworkers worker方法必须知道有未决的取消,因此只有这样才能取消。
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时,您将取消取消设置为待处理。但是您还需要在DoWork方法中对该属性进行注意-尽快取消作业。请参阅MSDN上的示例。
,在您的“ DoWork”例程中,您可以使用worker1.CancellationPending检查工作线程(将其称为worker1),如果为true,则尝试将其取消,如果您在内部明显的代码中对此进行了测试,停止继续处理,并在最后设置e.Cancel = true,您将成功检查并处理了后台工作的取消。
,必须将Backgroundworker编程为可取消的。首先设置工人可取消:
var bg= new BackgroundWorker();
bg.WorkerSupportsCancellation = true;
然后在worker循环中检查check5ѭ类的CancellationPending
标志,以查看何时应退出循环。
,在初始化BackgroundWorker
组件时以及调用RunWorkerAsync
之前,必须设置WorkerSupportsCancellation属性。因此,例如:
MyWorker = new BackgroundWorker();
MyWorker.WorkerSupportsCancellation = true;
MyWorker.WorkerReportsProgress = true;
MyWorker.DoWork += DoWorkEventHandler;
MyWorker.ProgressChanged += WorkerProgressChanged;
MyWorker.RunWorkerAsync();