2011-08-28 63 views
1

我尝试两次调用,然后再次调用另一个对象。WPF从两个线程调用

public void Show() 
{ 
    if (mainGrid == null) 
     return; 
    if (!Dispatcher.CheckAccess()) 
    { 
     Dispatcher.BeginInvoke(new ThreadStart(delegate() { Show(); }), DispatcherPriority.Background); 
     return; 
    } 

    mainGrid.Children.Add(rec); 
    rec.HorizontalAlignment = System.Windows.HorizontalAlignment.Stretch; 
    rec.VerticalAlignment = System.Windows.VerticalAlignment.Stretch; 

    mainGrid.Children.Add(this); 
    this.HorizontalAlignment = System.Windows.HorizontalAlignment.Center; 
    this.VerticalAlignment = System.Windows.VerticalAlignment.Center; 
} 

两个物体B,C继承了这一功能,从A: 当我从过程调用B.show(),然后B.showStop()从线程和C.sh​​ow()我得到异常使用特权主.children.Add(..)来自C.show() 请帮我解决这个问题。

+0

我删除了第二个方法声明,因为它似乎是完全一样的东西。 (你有意外粘贴两次吗?) –

+0

你得到的实际异常是什么?和'showStop()'的代码是什么? – svick

回答

1

我想你应该提供关于你的问题更多的信息,例如:

  • 哪种类是A(这似乎是虽然一个UI对象)
  • 什么是REC

但是现在我认为问题可能是你正在实例化那些不在UI中的视觉对象。线程:如果你在一个工作线程上创建一个按钮,它将会有该线程分派器,这与UI线程分派器。

我不能准确地告诉你这么少的信息发生了什么,但我认为你添加了两个在不同线程上创建的控件,因此两个Add中的一个会给你一个例外。

+0

谢谢!解决了这个问题。 –