有没有办法在超时后整齐地取消长时间运行的后台工作人员?
private void bw_DoWork(object sender, DoWorkEventArgs e)
{
ComplexRowContainer crc = (ComplexRowContainer)e.Argument;
string filename = crc.AppFullPath;
string calculatedChecksum = BuildChecksum(filename);
e.Result = calculatedChecksum;
}
private void bw_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
{
string newChecksum = (string)e.Result;
if (newChecksum.Equals(oldChecksum))
{
MessageBox.Show("Same");
}
else
{
MessageBox.Show("Different");
}
}
我确实需要修改取消事件。但是,有什么“内置”可以自动取消长时间运行的任务,还是应该构建一个计时器以在超时时取消?感谢。
答案 0 :(得分:1)
实际上,这是使用BackgroundWorker的方法:
如果要在超时时执行此操作,则可以从计时器事件中调用CancelAsync。
答案 1 :(得分:0)
有没有办法整齐地取消长期运行的后台工作人员,比方说, 超时后?
要取消后台工作人员,您可以通过设置DoWorkEventArgs
在DoWork
事件方法中使用e.Cancel = true
。要取消长时间运行的后台工作程序,您需要定义哪一个方法需要很长时间,并遵循Mike Marynowski的注释,您应该使用Task
来运行它并使用CancellationToken
来取消长时间运行的任务。
有关取消后台工作人员的一些信息,您可以参考:
http://msdn.microsoft.com/en-us/library/cc221403%28v=vs.95%29.aspx
有什么“内置”可以自动取消 长期任务
是的,您可以参考下面的链接。
Asynchronously wait for Task<T> to complete with timeout
或
How to cancel a task that is waiting with a timeout without exceptions being thrown