簡體   English   中英

創建后台計時器以異步運行

[英]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的回答。

你用的是什么樣的計時器?

  1. System.Windows.Forms.Timer將在UI線程中執行
  2. 除非指定SynchronizingObject,否則System.Timers.Timer將在線程池線程中執行
  3. System.Threading.Timer在線程池線程中執行其回調

在所有情況下,計時器本身都是異步的 - 在它發生之前它不會“占用”一個線程。

來源: .NET計時器是否異步運行?

暫無
暫無

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

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