异步用户控件

Asynchronous UserControl

我已经创建了自己的图表库。到目前为止,一切正常,除了绘图部分不是并发的。我怎样才能做到这一点?现在我的屏幕在向图表控件添加项目时冻结。我尝试将添加函数重写为 Task.Run(()=> { adding to the ObservableCollection }) 但没有成功。

是否只在库中制作所有方法async?如果是,我 return 怎么办,因为我至少需要一个 Task?

是否有另一种创建异步控件的方法,我的意思是一般情况下?我希望有一个像 ListView 这样的控件,我可以在其中添加项目,并且新项目会同时添加到列表中。

UI 控件是线程仿射的,它们只能从 UI 线程处理,这就是您看到 Task.Run 失败的原因。

一般规则是,您不应占用 UI 与 CPU 绑定工作超过 50 毫秒。如果您有大量数据要使用 UI 控件处理,请尝试将工作分成较小的工作组并在迭代之间释放 UI 线程。

一般来说,你不应该公开 asynchronous wrappers over sync methods

让用户明确地将他的工作卸载到后台线程。