异步用户控件
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。
让用户明确地将他的工作卸载到后台线程。
我已经创建了自己的图表库。到目前为止,一切正常,除了绘图部分不是并发的。我怎样才能做到这一点?现在我的屏幕在向图表控件添加项目时冻结。我尝试将添加函数重写为 Task.Run(()=> { adding to the ObservableCollection })
但没有成功。
是否只在库中制作所有方法async
?如果是,我 return 怎么办,因为我至少需要一个 Task
?
是否有另一种创建异步控件的方法,我的意思是一般情况下?我希望有一个像 ListView
这样的控件,我可以在其中添加项目,并且新项目会同时添加到列表中。
UI 控件是线程仿射的,它们只能从 UI 线程处理,这就是您看到 Task.Run
失败的原因。
一般规则是,您不应占用 UI 与 CPU 绑定工作超过 50 毫秒。如果您有大量数据要使用 UI 控件处理,请尝试将工作分成较小的工作组并在迭代之间释放 UI 线程。
一般来说,你不应该公开 asynchronous wrappers over sync methods。
让用户明确地将他的工作卸载到后台线程。