[英]C# Background Worker Question
我有一个后台工作人员,它基本上执行以下操作:
当有文件要处理时,上述步骤将需要循环并继续处理。
我希望后台工作人员能够停止,并且我看到了 WorkerSupportsCancellation 设置,但我如何确保它只能在文件之间停止,而不是在处理文件时停止?
将WorkerSupportsCancellation
设置为 true,并定期检查DoWork
事件处理程序中的CancellationPending
属性。
CancelAsync
方法仅设置CancellationPending
属性。 它不会杀死线程; 由工人来响应取消请求。
例如:
private void myBackgroundWorker_DoWork(object sender, DoWorkEventArgs e)
{
while( !myBackgroundWorker.CancellationPending )
{
// Process another file
}
}
您必须在文件处理结束时检查后台工作人员的 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;
}
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.