我System.ComponentModel.BackgroundWorker
在我的WPF应用程序中使用。
如何设置超时BackgroundWorker
?
我System.ComponentModel.BackgroundWorker
在我的WPF应用程序中使用。
如何设置超时BackgroundWorker
?
我的建议如下
backgroundworker1完成工作 - 它接受取消,因此您可以让它停止。
backgroundworker2在超时未决时执行循环,并且超时完成。
如果backgroundworker1仍在运行,则RunWorkerComplete
this 会BackgroundWorker
杀死backgroundworker1 ..
这也应该接受取消,以便如果backgroundworker1完成并且仍在运行,您可以取消它。
BackgroundWorker 不直接支持超时,但确实支持取消。如果正在完成的工作是一个循环或其他结构,您可以定期检查 CancellationPending 成员然后中止,这将很有效。您将需要其他一些东西来告诉后台工作人员在超时后取消。在这里,我使用了一个动作的异步调用。
static void Main( string[] args )
{
var bg = new BackgroundWorker { WorkerSupportsCancellation = true };
bg.DoWork += LongRunningTask;
const int Timeout = 500;
Action a = () =>
{
Thread.Sleep( Timeout );
bg.CancelAsync();
};
a.BeginInvoke( delegate { }, null );
bg.RunWorkerAsync();
Console.ReadKey();
}
private static void LongRunningTask( object sender, DoWorkEventArgs eventArgs )
{
var worker = (BackgroundWorker)sender;
foreach ( var i in Enumerable.Range( 0, 5000 ) )
{
if ( worker.CancellationPending )
{
return;
}
else
{
//Keep working
}
}
}
如果这并不真正适合您想要完成的任务,您可能会对在实现返回值的函数上的超时或实现 C# 通用超时中找到的通用超时解决方案感兴趣。您可以在 BackgroundWorker 中使用它们。