我在一个单独的线程上,我正在尝试将一个子元素添加到网格(在XAML中定义),所以我的第一直觉就是这样做:
var someElement = new TextBlock { Text = "Hello world" };
Dispatcher.Invoke(() => MainGrid.Children.Add(someElement));
但似乎抛出异常,消息为“调用线程无法访问此对象,因为另一个线程拥有它。”
我也尝试了MainGrid.Dispatcher.Invoke
和Application.Current.Dispatcher.Invoke
,但它们都抛出相同的异常。
为了试着看看发生了什么,我创建了一个TextBlock元素(也在XAML中定义)。我通过一个简单的Text
调用编辑了它的Dispatcher.Invoke
属性,这是有效的。这是什么原因?我该如何解决?
答案 0 :(得分:2)
也许您正在尝试在错误的线程上创建TextBlock?这有用吗:
Dispatcher.Invoke(() =>
{
var someElement = new TextBlock { Text = "Hello world" };
MainGrid.Children.Add(someElement)
});
答案 1 :(得分:2)
@Andrew,我也认为问题在你的文本块中,请试试这个:
this.Dispatcher.Invoke(new Action(() => { MainGrid.Children.Add(new TextBlock(){Text = "Hello World"}); }));