30

データベーステーブルを毎分チェックする必要があるアプリがあります。テーブルは時刻ごとにインデックスが付けられているため、アプリはこのチェックを1分ごとに実行する必要があります。

これを行うための最良の方法は何ですか?バックグラウンドワーカースレッドを作成することはできますが、各チェックの後に60秒間スリープするように設定すると、チェックを呼び出すオーバーヘッドのために、最終的に1分を逃します。

私がチェックしてからチェックした分を覚えていますか。15秒ごとに言って、分が変わった場合はチェックを実行しました。

または、他に使用すべきアプローチはありますか?

WPF、VS2008、VB.NETを使用しています

TIA、

サイモン

4

3 に答える 3

38

DispatcherTimerはあなたが求めているものです - 必要な間隔を設定してから、メソッドを Tick イベントにアタッチするだけです - 扱います。

于 2009-01-26T10:49:43.943 に答える
36

MrTelly が言ったように、DispatcherTimer はこれを行う方法です。Dispatcher キューと緊密に統合されており、コールバックが正しいスレッド上にあることを確認します。以下は、このクラスに関するいくつかの優れた記事です。以下のサンプル コードでは、基本的な例を詳しく説明しています。

//  DispatcherTimer setup
DispatcherTimer dispatcherTimer = new System.Windows.Threading.DispatcherTimer();
dispatcherTimer.Tick += new EventHandler(dispatcherTimer_Tick);
dispatcherTimer.Interval = new TimeSpan(0,0,1);
dispatcherTimer.Start();

private void dispatcherTimer_Tick(object sender, EventArgs e)
{
    // Updating the Label which displays the current second
    lblSeconds.Content = DateTime.Now.Second;

    // Forcing the CommandManager to raise the RequerySuggested event
    CommandManager.InvalidateRequerySuggested();
}

タイマーと DispatcherTimer

MSDN ドキュメント

于 2009-01-26T10:56:25.617 に答える
1

WPF についてはわかりませんが、WinForms には、このためのタイマー コントロールがあります。存在しない場合、1 つの方法は次のループです。

  • ギリギリの設定を過ぎているかどうかを確認します
  • そうでない場合は、少し寝てからもう一度確認してください
  • 何かをする
  • 現在時刻を確認する
  • 分を節約する
  • 60000ミリ秒スリープ - 現在の時間(秒とミリ秒の部分) - いくつかの値
于 2009-01-26T10:50:10.887 に答える