2012-08-08 65 views
1

我有一些WPF應用程序。我需要在BackgroundWorker內執行一些代碼,我使用DispatcherTimer。此外,該代碼不使用用戶界面。我們可以在BackgroundWorker中使用DispatcherTimer嗎?

我的問題是這樣嗎?或者最好使用Timerwhile & Thread.Sleep

也就是它更好地使用Task & TimerDispatcherTimer代替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(); 
} 
+1

你說你在* BackgroundWorker中使用'DispatcherTimer' *?你最好發佈一些代碼... – 2012-08-08 13:14:10

+0

@DanPuzey對不起,代碼太大了。我只需要知道最好的性能解決方案。 – 2012-08-08 13:16:43

+0

@DanPuzey我只是放了一些代碼。 – 2012-08-08 13:26:09

回答

4

如果你的代碼不使用的UI則DispatcherTimer是不必要的 - 這是專門有給調度線程(通常是UI線程)在消防規範。普通的定時器就足夠了。

此外,在您的發佈代碼中,您基本上是「創建後臺線程來創建後臺線程」。我建議你完全刪除後臺工作者,並在StartLogManager方法中創建計時器。

相關問題