簡體   English   中英

C#異步調用方法定期

[英]C# async call method periodically

應用程序的主要線程正在做一些工作。

還有一個計時器,應該每隔10分鍾調用一些應該運行異步的方法。

你能給我一個很好的例子來組織這個嗎?

我不建議使用帶循環和休眠的顯式線程。 這是不好的做法和丑陋。 為此目的有計時器類:

如果這不是GUI應用程序,那么您可以使用System.Threading.Timer定期在不同的線程上執行代碼。

如果這是一個WinForms / WPF應用程序,請分別查看System.Windows.Forms.TimerSystem.Windows.Threading.DispatcherTimer 這些很方便,因為它們在GUI線程上執行代碼,因此不需要顯式的Invoke調用。

鏈接還包含每個鏈接的示例。

最簡單的方法是調用一個大功能,在這些動作之間休眠10分鍾。 這不會阻止任何東西,因為它在另一個線程中。

在.NET 4中,您可以使用Task類執行此操作:

Task t = Task.Factory.StartNew(() => { /* your code here */ });
// or
Task t = Task.Factory.StartNew(YourFunctionHere);

void YourFunction() {
    while (someCondition) {
        // do something
        Thread.Sleep(TimeSpan.FromMinutes(10));
    }
}

(此代碼尚未經過測試)

使用BackgroundWorker線程。

void FireTask()
{
    BackgroundWorker bw = new BackgroundWorker();
    bw.DoWork += new DoWorkEventHandler(bw_DoWork);
    bw.RunWorkerAsync();
}

void bw_DoWork(object sender, DoWorkEventArgs e)
{
    //Your job   
}

啟動另一個運行循環的線程

在循環內; 睡10分鍾然后打電話給你的方法,重復一遍

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM