在WPF中,如何从BackgroundWorker中的子窗口调用所有者窗口方法而无需实例化
本文关键字:窗口 调用 所有者 方法 实例化 WPF BackgroundWorker | 更新日期: 2023-09-27 18:17:26
在MainWindow中,我可以很容易地从DoWork事件调用MyMethod,这很好地工作,因为MyMethod没有访问任何UI控件。
我的问题是如何在子窗口中调用相同的方法(MyMethod),而不需要实例化一个新对象,其中以下语句在 BackgroundWorker
之外正确工作((MainWindow)this.Owner).MyMethod();
但是在 BackgroundWorker中(在子窗口中)这个语句抛出一个异常,尽管它没有任何访问UI的权限,它可以在主窗口的BackgroundWorker中调用。
调用RunWorkerAsync()时,考虑使用接受一个对象的重载。如果你从子窗口的UI线程调用RunWorkerAsync(),你可以调用
bw.RunWorkerAsync(this.Owner);
你可以把那个对象从DoWork事件参数中拉出来,然后在那个对象上调用你的方法。
((MainWindow)e.Argument).MyMethod();
您需要在Dispatcher UI线程上调用该调用:
Application.Current.Dispatcher.Invoke(() => { MyMethod() });