我的应用程序使用后台工作人员在循环内执行一些工作。我拥有它,以便在每次循环迭代时,它检查取消挂起是否为真,如果是,则中断循环。一切正常,我的应用程序在完成循环的当前迭代后停止处理。问题是我认为后台工作人员仍在运行 - 如果我单击按钮再次开始处理,我会收到一条错误消息,指出后台工作人员正忙。
我本来打算处置该工作人员,但它是在表单运行时创建的,因此如果我处置它,它就不会再次开始工作。我真正想做的是,如果我单击“停止处理”按钮,则告诉后台工作人员它已完成,因此当我单击开始按钮时,它已准备好再次开始处理!
我本来想尝试这个:
private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
{
while (!backgroundWorker1.CancellationPending)
{
// Start processing in a background thread so the GUI remains responsive,
// pass in the name of the text file produced by
// PFDR FilenameLogic(txtLetterType.Text);
}
}
创建worker时,设置worker.WorkerSupportsCancellation
to true
. Now inside the DoWork
处理程序,您必须定期(最常见的是,在某个循环开始时等)检查worker.CancellationPending
- 如果为 true,则设置e.Cancel = true;
(以便您可以区分完成和取消)、清理和退出(return;
)。现在您的取消按钮可以调用worker.CancelAsync();
它会采取适当的行动。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)