5

如何在 c# 中指定时间后取消后台工作人员或取消未响应的后台工作人员。

4

2 回答 2

4

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

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

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

于 2009-08-27T14:34:48.723 回答
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 );
        }
    }
}
于 2009-08-27T15:59:10.987 回答