1

我有一些 WPF 应用程序。我需要在 a 中执行一些代码,BackgroundWorkerDispatcherTimer为此使用。此外,该代码不使用 UI。

我的问题是这样可以吗?或者最好使用Timeror while& Thread.Sleep

使用Task&TimerDispatcherTimer代替更好BackgroundWorker吗?

所以我们有两种方法可供选择。(或者更多?)

  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 回答