如何使用长期运行计算的结果随时更新WPF控件



我有一个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()。它不应该是计算实现的一部分。

最新更新