WPF中.Children.Add上的网格元素抛出异常

时间:2014-02-11 01:44:33

标签: c# wpf multithreading xaml

我在一个单独的线程上,我正在尝试将一个子元素添加到网格(在XAML中定义),所以我的第一直觉就是这样做:

var someElement = new TextBlock { Text = "Hello world" };
Dispatcher.Invoke(() => MainGrid.Children.Add(someElement));

但似乎抛出异常,消息为“调用线程无法访问此对象,因为另一个线程拥有它。”

我也尝试了MainGrid.Dispatcher.InvokeApplication.Current.Dispatcher.Invoke,但它们都抛出相同的异常。

为了试着看看发生了什么,我创建了一个TextBlock元素(也在XAML中定义)。我通过一个简单的Text调用编辑了它的Dispatcher.Invoke属性,这是有效的。这是什么原因?我该如何解决?

2 个答案:

答案 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"}); }));