在 MainWindow 中,我可以轻松地从 DoWork 事件中调用 MyMethod ,这可以正常工作,因为 MyMethod 无法访问任何UI控件。
我的问题是如何在子窗口中调用相同的方法(MyMethod)而不使用实例化一个新对象,其中以下语句正常工作 outside < / strong> BackgroundWorker
((MainWindow)this.Owner).MyMethod();
但内部 BackgroundWorker(在子窗口中)此语句抛出异常,虽然它没有任何UI访问权限,可以在MainWindow中的BackgroundWoerker中调用。
任何帮助我的尝试都将受到赞赏。
答案 0 :(得分:0)
您需要在Dispatcher UI线程上调用该调用:
Application.Current.Dispatcher.Invoke(() => { MyMethod() });
答案 1 :(得分:0)
调用RunWorkerAsync()时,请考虑使用带有对象的重载。如果从子窗口的UI线程调用RunWorkerAsync(),则可以调用
bw.RunWorkerAsync(this.Owner);
然后,您可以从DoWork事件args中提取该对象,并在该对象上调用您的方法。
((MainWindow)e.Argument).MyMethod();