how to cancel background worker after specified time in c# or cancel not responding background worker.
+2
A:
Check out this tutorial: http://www.albahari.com/threading/part3.aspx
In order for a System.ComponentModel.BackgroundWorker thread to support cancellation, you need to set the WorkerSupportsCancellation property to True before starting the thread.
You can then call the .CancelAsync method of the BackgroundWorker to cancel the thread.
TLiebe
2009-08-27 14:34:48
i have read the above article, but i need to terminate my background worker after 1 minute
JKS
2009-08-27 14:40:19
What about creating a System.Threading.Timer object in your calling thread and set it for 1 minute. When the timer event fires, call the .CancelAsync method of the BackgroundWorker thread.
TLiebe
2009-08-27 14:42:16
A:
BackgroundWorker does not have support either case. Here is the start of some code to support those cases.
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 );
}
}
}
jyoung
2009-08-27 15:59:10