如何在c#中指定时间后取消后台工作程序或取消不响应后台工作程序。
答案 0 :(得分:4)
查看本教程:http://www.albahari.com/threading/part3.aspx
为了使System.ComponentModel.BackgroundWorker线程支持取消,您需要在启动线程之前将WorkerSupportsCancellation属性设置为True。
然后,您可以调用BackgroundWorker的.CancelAsync方法来取消该线程。
答案 1 :(得分:0)
BackgroundWorker不支持这两种情况。 以下是支持这些案例的一些代码的开头。
class MyBackgroundWorker :BackgroundWorker {
public MyBackgroundWorker() {
WorkerReportsProgress = true;
WorkerSupportsCancellation = true;
}
protected override void OnDoWork( DoWorkEventArgs e ) {
var thread = Thread.CurrentThread;
using( var cancelTimeout = new System.Threading.Timer( o => CancelAsync(), null, TimeSpan.FromMinutes( 1 ), TimeSpan.Zero ) )
using( var abortTimeout = new System.Threading.Timer( o => thread.Abort(), null, TimeSpan.FromMinutes( 2 ), TimeSpan.Zero ) ) {
for( int i = 0; i <= 100; i += 20 ) {
ReportProgress( i );
if( CancellationPending ) {
e.Cancel = true;
return;
}
Thread.Sleep( 1000 ); //do work
}
e.Result = "My Result"; //report result
base.OnDoWork( e );
}
}
}