在WPF中,如何在没有实例化的情况下从BackgroundWorker中的子窗口调用所有者窗口方法?

时间:2014-08-11 19:32:41

标签: c# wpf backgroundworker

MainWindow 中,我可以轻松地从 DoWork 事件中调用 MyMethod ,这可以正常工作,因为 MyMethod 无法访问任何UI控件。

我的问题是如何在窗口中调用相同的方法(MyMethod)而不使用实例化一个新对象,其中以下语句正常工作 outside < / strong> BackgroundWorker

((MainWindow)this.Owner).MyMethod();

内部 BackgroundWorker(在子窗口中)此语句抛出异常,虽然它没有任何UI访问权限,可以在MainWindow中的BackgroundWoerker中调用。

任何帮助我的尝试都将受到赞赏。

2 个答案:

答案 0 :(得分:0)

您需要在Dispatcher UI线程上调用该调用:

Application.Current.Dispatcher.Invoke(() => { MyMethod() });

答案 1 :(得分:0)

调用RunWorkerAsync()时,请考虑使用带有对象的重载。如果从子窗口的UI线程调用RunWorkerAsync(),则可以调用

bw.RunWorkerAsync(this.Owner);

然后,您可以从DoWork事件args中提取该对象,并在该对象上调用您的方法。

((MainWindow)e.Argument).MyMethod();