我有一个旧的winform应用程序,在这样的计时器中使用了高性能绘图组件(Mitov.PlotLab):
private void updateGuiTimer_Tick(...)
{
doSomeDemandingCalculations();
plotTheResultsInComponent();
}
我做了一些重构并改变了代码:
Task.Factory.StartNew(()=>
{
while(isRunning)
{
doSomeDemandingCalculations();
if(isPlotting) continue;
isPlotting = true;
BeginInvoke(new Action(()=>
{
plotTheResultsInComponent();
isPlotting = false;
}));
}
}, TaskCreationOptions.LongRunning);
问题在于,旧方法可以跟上50毫秒的滴答间隔,而新代码与旧密码相比仅占20%。
我没有将计算从UI线程卸载到另一个线程并且只是在UI线程中进行绘图吗?
在旧代码中有3个定时器,它们做了类似的工作。我将所有这些都重构为Task
s。
我的做法有问题吗?