我真的不知道如何从线程中正确获取数据。
在线程(或任务,无所谓)我想计算很多双打。完成后,我想在网格和图表中显示这些数据。所以我试图返回某种类型的
Observable<List<double>>
当我想创建一个&#34;新的ViewModel(数据)&#34;时,我得到线程的异常原因。
那么我如何从一个线程中正确地获取这样的列表并在UI中使用它? 或者也许在计算时传递这些数据以显示一些实时值也很好..
感谢您的回答,只需要一些提示
答案 0 :(得分:1)
这种功能很常见,通常使用BackgroundWorker
Class来完成。链接页面上有一个代码示例,您可以在我对本网站How to correctly implement a BackgroundWorker with ProgressBar updates?问题的回答中找到另一个反馈。
或者,您可以使用UI线程中的Dispatcher
对象将值传递给该线程。请注意,每个线程都拥有自己的Dispatcher
,因此请务必从UI线程中调用该线程。你可以使用这个小助手方法:
public object RunOnUiThread(Delegate method)
{
return Dispatcher.Invoke(DispatcherPriority.Normal, method);
}
你可以像这样使用它:
RunOnUiThread((Action)delegate
{
// You can run any number of lines of code on the UI Thread here
});
或者内联,像这样:
RunOnUiThread((Action)delegate { UpdateData(); });
我在一个单独的类中有这个方法,它有这样的构造函数:
private UiThreadManager(Dispatcher dispatcher)
{
Dispatcher = dispatcher;
}
public UiThreadManager() : this(Dispatcher.CurrentDispatcher) { }
我在UI线程上调用此构造函数,以确保我将使用的Dispatcher
实际上是来自UI线程的Dispatcher
。