WPF从两个线程调用

时间:2011-08-28 10:05:48

标签: c# wpf multithreading invoke

我尝试再次调用两次然后再从anther对象调用。

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()然后从Thread和C.sh​​ow()调用B.showStop()时我从C.show()使用特权main.children.Add(..)获得异常 请帮我解决这个问题。

1 个答案:

答案 0 :(得分:1)

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

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

但是目前我认为问题可能是你在UI线程中实例化那些可视对象:如果你在workerthread上创建了一个Button,它将拥有该线程Dispatcher,它与UI Thread不同调度员。

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