[英]Timeout for BackgroundWorker
我在我的WPF應用程序中使用System.ComponentModel.BackgroundWorker
。
如何為BackgroundWorker
設置超時 ?
我的建議如下
backgroundworker1完成工作 - 它接受取消,所以你可以讓它停止。
backgroundworker2在超時等待時執行循環,並且超時完成。
如果backgroundworker1仍在運行,則此BackgroundWorker
的RunWorkerComplete
將RunWorkerComplete
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中使用它們。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.