如何在c#中指定的时间后取消后台工作程序

如何在c#中指定时间后取消后台工作程序或取消不响应后台工作程序。

查看本教程: http : //www.albahari.com/threading/part3.aspx

为了使System.ComponentModel.BackgroundWorker线程支持取消,您需要在启动线程之前将WorkerSupportsCancellation属性设置为True。

然后,您可以调用BackgroundWorker的.CancelAsync方法来取消该线程。

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 ); } } }