【发布时间】:2014-02-11 10:33:43
【问题描述】:
我在一个单独的线程上,我正在尝试将一个子元素添加到一个网格(在 XAML 中定义),所以我的第一反应是这样做:
var someElement = new TextBlock { Text = "Hello world" };
Dispatcher.Invoke(() => MainGrid.Children.Add(someElement));
但似乎抛出了异常,消息是“调用线程无法访问此对象,因为不同的线程拥有它。”
我也尝试过MainGrid.Dispatcher.Invoke 和Application.Current.Dispatcher.Invoke,但它们都抛出了相同的异常。
为了尝试查看发生了什么,我创建了一个 TextBlock 元素(也在 XAML 中定义)。我已经用一个简单的Dispatcher.Invoke 调用编辑了它的Text 属性,这很有效。这是什么原因?我该如何解决?
【问题讨论】:
-
你能告诉我你的'someElement'是什么吗?它是在代码隐藏中定义的?还是 xaml?
-
someElement将是在调用之前通过代码隐藏创建的元素。我将进行编辑以使其更清晰。 -
我试过你的代码,但它工作正常。你能试试这个:this.Dispatcher.Invoke(new Action(() => { MainGrid.Children.Add(new TextBlock(){Text = "Hello World"}); }));
标签: c# wpf multithreading xaml