这是我的场景:我有一个带有按钮的简单 wpf 窗口。当用户单击按钮时,我想创建另一个窗口(我们称之为子窗口),然后在后台线程上创建一个 wpf 按钮,将其添加到子窗口并显示子窗口。这是此的代码:
Button backgroundButton = null;
var manualResetEvents = new ManualResetEvent[1];
var childWindow = new ChildWindow();
manualResetEvents[0] = new ManualResetEvent(false);
var t = new Thread(x =>
{
backgroundButton = new Button { Content = "Child Button" };
childWindow.Dispatcher.BeginInvoke(DispatcherPriority.Normal, (Action)(() => childWindow.MainPanel.Children.Add(backgroundButton)));
manualResetEvents[0].Set();
});
t.SetApartmentState(ApartmentState.STA);
t.Start();
WaitHandle.WaitAll(manualResetEvents);
childWindow.ShowDialog();
当我调用 ShowDialog() 时,我收到此错误“调用线程无法访问此对象,因为不同的线程拥有它。 ”。我知道这个错误是因为添加到子窗口的按钮是在后台线程上创建的,因此我们得到了这个错误。问题是:我如何克服这个错误并且仍然在后台线程上创建我的按钮