【问题标题】:Update Textbox Text on Asynchronous Thread [duplicate]在异步线程上更新文本框文本 [重复]
【发布时间】:2016-03-30 14:36:25
【问题描述】:

这里是我后面代码中的几行代码:

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“rtbJsonData”的文本设置为结果。但是,目前当我运行它时,我得到了异常:

“调用线程无法访问此对象,因为不同的线程拥有它。”

我该怎么做?

【问题讨论】:

    标签: c# wpf asynchronous


    【解决方案1】:

    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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-04-02
      • 2010-11-11
      • 2023-04-09
      • 2019-02-25
      • 1970-01-01
      • 2016-04-04
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多