[英]Creating a background timer to run asynchronously
我真的很掙扎。 我正在visual studio中創建一個winforms
應用程序,需要一個每半小時打一次的后台計時器 - 這樣做的目的是從服務器下載更新。
我嘗試了幾種不同的方法但是由於教程/示例不好或者我自己在C#
的缺點而失敗了。 我認為到目前為止,向我展示我所嘗試過的東西將是浪費時間,因為我認為我的嘗試遠遠不夠。
有沒有人知道實現C#
新手容易理解的異步后台計時器的簡單明了的方法?
// Create a 30 min timer
timer = new System.Timers.Timer(1800000);
// Hook up the Elapsed event for the timer.
timer.Elapsed += OnTimedEvent;
timer.Enabled = true;
...
private static void OnTimedEvent(object source, ElapsedEventArgs e)
{
// do stuff
}
通常的注意事項:計時器不會非常准確,可能需要GC.KeepAlive(timer)
另請參閱: 為什么System.Timers.Timer能夠在GC中存活但不能在System.Threading.Timer中存活?
在表單中聲明成員變量:
System.Timers.Timer theTimer;
在表單加載(或您需要開始更新輪詢的任何其他時間),執行:
theTimer = new System.Timers.Timer(1800000);
theTimer.Elapsed += PollUpdates;
theTimer.Start();
聲明你的PollUpdates成員函數如下:
private void PollUpdates(object sender, EventArgs e)
{
}
我想你需要知道所有的計時器類。 請參閱下面Jon的回答。
你用的是什么樣的計時器?
- System.Windows.Forms.Timer將在UI線程中執行
- 除非指定SynchronizingObject,否則System.Timers.Timer將在線程池線程中執行
- System.Threading.Timer在線程池線程中執行其回調
在所有情況下,計時器本身都是異步的 - 在它發生之前它不會“占用”一個線程。
來源: .NET計時器是否異步運行?
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.