[英]How can I wait for a timer to finished before I execute next line of code without putting the thread to sleep?
我試圖在我的應用程序中定時執行某些代碼。 我正在應用程序中創建多個線程,並且試圖使它們同時執行代碼。
我想知道是否有一種方法可以讓我的線程等待我的計時器完成,然后再繼續執行下一段代碼而不會使其進入睡眠狀態? 目前,我正在這樣做,但是肯定有另一種方法。 誰能提供幫助?
System.Timers.Timer _timer = new System.Timers.Timer();
_timer.Interval = (2000);
_timer.Elapsed += (sender, e) =>
{
//code to execute
_timer.Enabled = false;
};
_timer.Enabled = true;
Thread.Sleep(2000);
//code to invoke my finished delegate
您可以將Task.Delay
用作更 Task.Delay
的異步方法 :
Task.Run(async delegate
{
await Task.Delay(2000);
//do stuff here
});
Task
創建異步操作,並且(大部分)抽象出線程模型。 當您位於標記為async
的例程中時, await
關鍵字的意思是“等待此過程完成然后運行”。 在上面的示例中,這都是在您正在執行的線程之外發生的。
您甚至不需要使用Timer
,只需使用async/await
功能,就不會阻塞您的UI
線程
private async void SomeMethod()
{
await Task.Delay(2000); // wait two seconds asynchronously
// your code goes here
// this code will be executed after two seconds
}
我試圖在我的應用程序中定時執行某些代碼。 我正在應用程序中創建多個線程,並且試圖使它們同時執行代碼。
一種方法(基於您的多線程注釋)是使用CountDownEvent類。
using (var mySignal = new CountDownEvent(doWorks.Count))
{
foreach (var doWork in doWorks)
{
// Start Threads example
Task.Factory.StartNew(() =>
{
// do work
// signal this thread done
mySignal.Signal();
}
}
// wait for all threads
mySignal.Wait();
// All threads are done.
}
假設您絕對必須這樣做,則可以使用EventWaitHandle
如前所述,您最好使用上述的其他實現。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.