从代码更新UI线程

时间:2016-09-07 20:38:19

标签: c# wpf multithreading

如何编辑C#任务之外的WPF数据?我使用标准WPF模板定义了一个UI。网格仅包含:

<TextBlock x:Name="myTextBox" Text="Original Text" />

在我的代码中,我有:

using System.Threading.Tasks;
using System.Windows;

namespace UpdateGUI
{
  public partial class MainWindow : Window
  {
    private int myInt;

    public MainWindow()
    {
      InitializeComponent();

      myInt = 0;
      Task.Factory.StartNew(() =>
      {
        myInt++;
        myTextBox.Text = "New Text";
      });
    }
  }
}

这会引发以下异常:

  

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

哪个帖子拥有myTextBox?为什么我在编辑myInt时没有看到此错误?

1 个答案:

答案 0 :(得分:0)

你要做的事是不可能的。您的代码在与UI线程分开的自己的线程中运行。

您需要了解有关WPF的更多信息。为了实现这一目标,我知道有两种解决方案:

  1. 使用双向绑定到模型属性
  2. 实施调度员
  3. 选项1是执行此操作的常用方法,因此请了解双向绑定。调度员对你要做的事情来说太过分了。