从两个线程调用WPF

本文关键字:线程 调用 WPF 两个 | 更新日期: 2023-09-27 18:06:45

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

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

从两个线程调用WPF

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

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

但目前我认为问题可能是你实例化那些视觉对象不在UI线程:如果你创建一个按钮在一个工作线程它会有线程调度器,这是不同于UI线程调度器。

我不能确切地告诉你发生了什么,但我认为你正在添加两个控件,这两个控件是在不同的线程上创建的,所以两个Add中的一个会给你一个异常。