26

私はこれに本当に苦労しています。Visual Studio でアプリケーションを作成していwinformsますが、30 分ごとに 1 回作動するバックグラウンド タイマーが必要です。これの目的は、サーバーから更新を取得することです。

私はいくつかの異なるアプローチを試みましたが、チュートリアル/例が貧弱であるか、C#. 私が試したことはかなり的外れだったように見えるので、私がこれまでに試したことをあなたに示すのは時間の無駄だと思います.

C#初心者が簡単に理解できる非同期バックグラウンドタイマーを実装する明確で簡単な方法を知っている人はいますか?

4

3 に答える 3

38
    // 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 には耐えられないのですか?

于 2013-04-08T12:54:18.800 に答える
11

フォームでメンバー変数を宣言します。

System.Timers.Timer theTimer;

フォームの読み込み時 (または更新ポーリングを開始する必要があるとき) に、次のようにします。

theTimer = new System.Timers.Timer(1800000);
theTimer.Elapsed += PollUpdates;
theTimer.Start();

PollUpdates メンバー関数を次のように宣言します。

private void PollUpdates(object sender, EventArgs e)
{
}
于 2013-04-08T12:59:47.823 に答える
9

すべてのタイマー クラスについて知っておく必要があると思います。以下のジョンの回答を参照してください。

タイマーは何をお使いですか?

  1. System.Windows.Forms.Timer は UI スレッドで実行されます
  2. System.Timers.Timer は、SynchronizingObject を指定しない限り、スレッド プール スレッドで実行されます。
  3. System.Threading.Timer は、スレッド プール スレッドでコールバックを実行します。

いずれの場合も、タイマー自体は非同期であり、起動するまでスレッドを「占有」しません。

出典: .NET タイマーは非同期で実行されますか?

于 2013-04-08T12:54:33.067 に答える