如何将数据从Thread传递到UI-Thread并查看该数据?

时间:2014-10-21 11:17:12

标签: c# wpf multithreading task

我真的不知道如何从线程中正确获取数据。

在线程(或任务,无所谓)我想计算很多双打。完成后,我想在网格和图表中显示这些数据。所以我试图返回某种类型的

 Observable<List<double>>

当我想创建一个&#34;新的ViewModel(数据)&#34;时,我得到线程的异常原因。

那么我如何从一个线程中正确地获取这样的列表并在UI中使用它? 或者也许在计算时传递这些数据以显示一些实时值也很好..

感谢您的回答,只需要一些提示

1 个答案:

答案 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