在WPF中,如何从BackgroundWorker中的子窗口调用所有者窗口方法而无需实例化

本文关键字:窗口 调用 所有者 方法 实例化 WPF BackgroundWorker | 更新日期: 2023-09-27 18:17:26

MainWindow中,我可以很容易地从DoWork事件调用MyMethod,这很好地工作,因为MyMethod没有访问任何UI控件。

我的问题是如何在窗口中调用相同的方法(MyMethod),而不需要实例化一个新对象,其中以下语句在 BackgroundWorker

之外正确工作
((MainWindow)this.Owner).MyMethod();

但是 BackgroundWorker中(在子窗口中)这个语句抛出一个异常,尽管它没有任何访问UI的权限,它可以在主窗口的BackgroundWorker中调用。

在WPF中,如何从BackgroundWorker中的子窗口调用所有者窗口方法而无需实例化

调用RunWorkerAsync()时,考虑使用接受一个对象的重载。如果你从子窗口的UI线程调用RunWorkerAsync(),你可以调用

bw.RunWorkerAsync(this.Owner);

你可以把那个对象从DoWork事件参数中拉出来,然后在那个对象上调用你的方法。

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

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

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