我有一个wpf控件,一个图表,用户可以在其中与鼠标交互。
现在,每次鼠标移动时,我都要进行一次耗时的计算,大约需要700毫秒才能完成(即使在进行了一系列性能评估之后(。结果应显示在标签中。
所以我想做的是,当鼠标移动而不是立即移动并更新标签(然后UI滞后近一秒钟(时,我想进行异步操作,并在计算完成时更新标签。
如何做到这一点?
最简单的方法是为控件提供一个异步事件处理程序,使用类似Task.Run()
的东西在另一个线程上执行CPU繁重的工作,并在完成后更新标签。像这样的东西会起作用:
private async void Control_Event(object sender, EventArgs e)
{
var result = await Task.Run(() => MyExpensiveCalculation());
label.Text = result;
}
private string MyExpensiveCalculation()
{
//Do your expensive calculation here and return the result.
}
请注意,应该从UI线程调用Task.Run()
。它不应该是计算实现的一部分。