更新异步线程上的文本框文本

时间:2016-03-30 14:36:25

标签: c# wpf asynchronous

在这里向右转到我的代码背后的代码几行:

private static Factual factual = new Factual(FACTUAL_KEY, FACTUAL_SECRET);

private void OnStartQueries_Click(object sender, RoutedEventArgs e)
{
    RunAsyncQuery(43.0120, -81.2003, 3000, 25).ContinueWith(task => rtbJsonData.AppendText(task.Result));
}

private static async Task<string> RunAsyncQuery(double lat, double lng, int radius, int limit)
{
    return await Task.Run(() => factual.Fetch("places", new Query().WithIn(new Circle(lat, lng, radius)).Limit(limit)));
}

因此,当您单击“开始查询”按钮时,我可以看到我想要异步运行方法。当它返回该查询的结果时,我想设置RichTextBox&#34; rtbJsonData&#34;的文本。结果。但是,目前当我运行它时,我得到了例外:

&#34;调用线程无法访问此对象,因为另一个线程拥有它。&#34;

我该怎么做?

1 个答案:

答案 0 :(得分:0)

RichTextBox“rtbJsonData”由主线程拥有,无法直接从另一个线程访问。

在WPF中,您可以从INotifyPropertyChanged接口派生模型。模型上的任何更改都将在视图上更新。

有关完整示例,请参阅MSDN:https://msdn.microsoft.com/en-us/library/system.componentmodel.inotifypropertychanged(v=vs.110).aspx

这是基于MVVM(模型视图视图模型)模式https://msdn.microsoft.com/en-us/library/hh848246.aspx