C#背景工人问题
我有一名背景工作人员,主要负责以下工作:C#背景工人问题,c#,backgroundworker,C#,Backgroundworker,我有一名背景工作人员,主要负责以下工作: 找到下一个可用文件并将其标记为“正在处理” 处理该文件并将更新的版本另存为新文件 将原件标记为已处理 当有文件要处理时,上述步骤需要循环并继续处理 我希望后台工作程序能够停止,并且我看到WorkerSupportsScanCellation设置,但是如何确保它只能在文件之间停止,而不能在处理文件时停止?将WorkerSupportsScanCellation设置为true,并定期检查DoWork事件处理程序中的CancellationPending属性
我希望后台工作程序能够停止,并且我看到WorkerSupportsScanCellation设置,但是如何确保它只能在文件之间停止,而不能在处理文件时停止?将
WorkerSupportsScanCellation
设置为true,并定期检查DoWork
事件处理程序中的CancellationPending
属性
CancelAsync
方法仅设置CancellationPending
属性。它不会杀死线程;这取决于员工对取消请求的响应
e、 g:
您必须在文件处理结束时检查后台工作程序的CancellationPending Proceptiy
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;
}
}
}
你会希望看到下面的答案,因为它更完整。
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;
}
}
}