C# 我们可以在后台工作人员中使用Dispatchermer吗?
我有一些WPF应用程序。我需要在C# 我们可以在后台工作人员中使用Dispatchermer吗?,c#,.net,wpf,C#,.net,Wpf,我有一些WPF应用程序。我需要在BackgroundWorker中执行一些代码,为此我使用dispatchermer。另外,该代码不使用UI 我的问题是这样可以吗?或者最好使用定时器或同时和线程。睡眠 使用任务和计时器或调度程序而不是后台工作人员是否更好 因此,我们有两种方法可供选择。(还是更多?) BackgroundWorker调用dispatchermer | | Timer | | | |(While&Thread.Sleep) Task调用dispatchermer | | | Tim
BackgroundWorker
中执行一些代码,为此我使用dispatchermer
。另外,该代码不使用UI
我的问题是这样可以吗?或者最好使用定时器
或同时
和线程。睡眠
使用任务
和计时器
或调度程序
而不是后台工作人员
是否更好
因此,我们有两种方法可供选择。(还是更多?)
BackgroundWorker
调用dispatchermer | | Timer | | | |(While&Thread.Sleep)
Task
调用dispatchermer | | | Timer | | | | | | | | | | | | | | |
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();
}
如果您的代码不使用UI,那么就不需要
Dispatchermer
——它专门用于在Dispatcher线程(通常是UI线程)上触发代码。一个固定的计时器就足够了
此外,在您发布的代码中,您实际上是“创建后台线程来创建后台线程”。我建议您完全删除后台工作程序,只需在
StartLogManager
方法中创建计时器。如果您的代码不使用UI,则不需要Dispatchermer
——它专门用于在Dispatcher线程(通常是UI线程)上触发代码。一个固定的计时器就足够了
此外,在你发布的代码中,你本质上是在“创建一个后台线程来创建一个后台线程”。我建议你完全删除后台工作程序,只需在
startogmanager
方法中创建计时器。你说你在后台工作程序中使用dispatchermer
?你最好发布一些代码…@DanPuzey抱歉代码太大了。我只需要知道最好的性能解决方案。@DanPuzey我只是放了一些代码。你说你在后台工作人员中使用Dispatchermer
?你最好发布一些代码…@DanPuzey抱歉代码太大了。我只需要知道最好的性能解决方案。@DanPuzey我只是放了一些代码。