我有一个后台工作者基本上做了以下几点:
当有要处理的文件时,上述步骤需要循环并继续处理。
我希望后台工作程序能够被停止,我看到了WorkerSupportsCancellation设置,但是如何确保它只能在文件之间停止,而不是在处理文件时?
答案 0 :(得分:9)
将WorkerSupportsCancellation
设置为true,并定期检查CancellationPending
事件处理程序中的DoWork
属性。
CancelAsync
方法仅设置CancellationPending
属性。它不会杀死线程;工作人员可以回复取消请求。
e.g:
private void myBackgroundWorker_DoWork(object sender, DoWorkEventArgs e)
{
while( !myBackgroundWorker.CancellationPending )
{
// Process another file
}
}
答案 1 :(得分:5)
您必须在文件处理结束时检查后台工作人员的CancellationPending procepty
static void Main(string[] args)
{
BackgroundWorker bw = new BackgroundWorker();
bw.DoWork += new DoWorkEventHandler(bw_DoWork);
bw.WorkerSupportsCancellation = true;
bw.RunWorkerAsync();
Thread.Sleep(5000);
bw.CancelAsync();
Console.ReadLine();
}
static void bw_DoWork(object sender, DoWorkEventArgs e)
{
string[] files = new string[] {"", "" };
foreach (string file in files)
{
if(((BackgroundWorker)sender).CancellationPending)
{
e.Cancel = true;
//set this code at the end of file processing
return;
}
}
}