1

私はいくつかのWPFアプリケーションを持っています。内でいくつかのコードを実行する必要があり、そのためBackgroundWorker に使用DispatcherTimerします。また、そのコードは UI を使用しません。

私の質問はそれでいいですか?Timerまたは、またはwhile&を使用する方が良いThread.Sleepですか?

また、Task& TimerorDispatcherTimerの代わりに使用する方が良いBackgroundWorkerですか?

したがって、選択する2つのアプローチがあります。(以上?)

  1. BackgroundWorker通話DispatcherTimer || Timer || (While & Thread.Sleep)

  2. Task 通話DispatcherTimer || Timer || (While & Thread.Sleep)

最高のパフォーマンス ソリューションを知りたいだけです。

ここにいくつかのコードがあります

DispatcherTimer logManagerUpdater = new DispatcherTimer(DispatcherPriority.Background);
BackgroundWorker logManagerWorker = new BackgroundWorker();

private void StartLogManager()
{
    logManagerWorker.DoWork += new DoWorkEventHandler(logManagerWorker_DoWork);
    logManagerWorker.RunWorkerAsync();
}

void logManagerWorker_DoWork(object sender, DoWorkEventArgs e)
{
    if (this.logManagerWorker.CancellationPending)
    {
       e.Cancel = true;
       return;
    }

    logManagerUpdater.Interval = new TimeSpan(0, 0, 10);
    logManagerUpdater.Tick += new EventHandler(logManagerUpdater_Tick);  
    logManagerUpdater.Start();
}

void logManagerUpdater_Tick(object sender, EventArgs e)
{
   LogManagerJob();   
   LogDBManagerJob();  
}
4

1 に答える 1

4

コードで UI を使用しない場合DispatcherTimerは不要です。具体的には、Dispatcher スレッド(通常は UI スレッド) でコードを起動するためにあります。通常のタイマーで十分です。

さらに、投稿されたコードでは、本質的に「バックグラウンド スレッドを作成してバックグラウンド スレッドを作成する」ことになります。バックグラウンドワーカーを完全に削除し、メソッドでタイマーを作成することをお勧めしますStartLogManager

于 2012-08-08T13:46:49.487 に答える