我有一些WPF应用程序。我需要在BackgroundWorker
内执行一些代码,然后使用DispatcherTimer
。此代码也不使用UI。
我的问题是这样吗?或者最好使用Timer
或while
& Thread.Sleep
?
使用Task
& Timer
或DispatcherTimer
代替BackgroundWorker
?
所以我们有2种方法可供选择。 (或更多?)
BackgroundWorker
来电DispatcherTimer || Timer || (While & Thread.Sleep)
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();
}
答案 0 :(得分:4)
如果您的代码不使用UI,则DispatcherTimer
是不必要的 - 特别是在Dispatcher线程(通常是UI线程)上激活代码。一个普通的计时器就足够了。
此外,在您发布的代码中,您实际上是“创建后台线程来创建后台线程”。我建议您完全删除后台工作程序,只需在StartLogManager
方法中创建计时器。