静态方法相互调用c#时出现问题
本文关键字:问题 调用 静态方法 | 更新日期: 2023-09-27 18:28:46
我正在尝试替换所有MessageBox。在我的应用程序中显示调用,因此我创建了一个静态MsgBox类,该类具有以下定义的两个方法:
(一)
public static MessageBoxResult Show(Window owner, string messageBoxText, string caption = "",
MessageBoxButton button = MessageBoxButton.OK,
MessageBoxImage icon = MessageBoxImage.None,
MessageBoxResult defaultResult = MessageBoxResult.None)
这个调用另一个
(两)
public static MessageBoxResult Show(string messageBoxText, string caption = "",
MessageBoxButton button = MessageBoxButton.OK,
MessageBoxImage icon = MessageBoxImage.None,
MessageBoxResult defaultResult = MessageBoxResult.None)
{
return Show(Application.Current.MainWindow, messageBoxText, caption, button, icon, defaultResult);
}
所以问题是,如果我直接打电话给第一个,没有问题,一切都正常。但如果我给第二个打电话,什么也不会发生。
这一切是如何运作的,我有什么不了解的吗?
.Show重载方法用于显示您想要的任何类型的MessageBox。您正在返回一个.Show,该值未应用于任何MessageBox,因此您需要获取此返回值并像MessageBox.Show(whateverReturned)
一样使用它
看起来答案是我试图从后台线程获取MainWindow,这是不允许的。
我已经将第二种方法代码更改为:
Window mainWindow = null;
UiDispatcher.Invoke(delegate { mainWindow = Application.Current.MainWindow; }, DispatcherPriority.Normal);
return Show(mainWindow, messageBoxText, caption, button, icon, defaultResult);
再次感谢@Dan和@ChrisSinclair带我度过难关!