私はこれに本当に苦労しています。 Visual Studioでwinforms
アプリケーションを作成していますが、30分ごとに1回作動するバックグラウンドタイマーが必要です。これの目的は、サーバーから更新をプルダウンすることです。
いくつかの異なるアプローチを試しましたが、それらは、チュートリアル/例が貧弱であるか、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スレッドで実行されます
- System.Timers.Timerは、SynchronizingObjectを指定しない限り、スレッドプールスレッドで実行されます。
- System.Threading.Timerは、スレッドプールスレッドでコールバックを実行します
すべての場合において、タイマー自体は非同期になります-起動するまでスレッドを「占有」しません。