C# WPF从两个线程调用

C# WPF从两个线程调用,c#,wpf,multithreading,invoke,C#,Wpf,Multithreading,Invoke,我尝试调用两次,然后再次从另一个对象调用 public void Show() { if (mainGrid == null) return; if (!Dispatcher.CheckAccess()) { Dispatcher.BeginInvoke(new ThreadStart(delegate() { Show(); }), DispatcherPriority.Background); return; }

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

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()调用时,然后从线程和C.show()调用B.showStop(),我在使用特权main.children.Add(…)时从C.show()得到异常
请帮我解决这个问题。

我认为您应该提供有关您的问题的更多信息,例如:

  • 哪种类型的类是一个类(尽管它似乎是一个UI对象)
  • 什么是rec
但目前我认为问题可能是您正在实例化那些不在UI线程中的可视对象:如果您在workerthread上创建一个按钮,它将具有线程调度程序,这与UI线程调度程序不同


我不能确切地告诉您在信息如此之少的情况下发生了什么,但我认为您正在添加两个在不同线程上创建的控件,因此两个
Add
中的一个将给您一个例外。

我认为您应该提供有关您的问题的更多信息,例如:

  • 哪种类型的类是一个类(尽管它似乎是一个UI对象)
  • 什么是rec
但目前我认为问题可能是您正在实例化那些不在UI线程中的可视对象:如果您在workerthread上创建一个按钮,它将具有线程调度程序,这与UI线程调度程序不同


我不能确切地告诉您在信息如此之少的情况下发生了什么,但我认为您正在添加两个在不同线程上创建的控件,因此两个
Add
中的一个会给您一个异常。

我删除了第二个方法声明,因为它看起来完全一样。(您是否意外粘贴了两次?)您得到的实际异常是什么?
showStop()
的代码是什么?我删除了第二个方法声明,因为它似乎是完全相同的东西。(您是否意外粘贴了两次?)您得到的实际异常是什么?
showStop()的代码是什么?