静态方法相互调用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);
}

所以问题是,如果我直接打电话给第一个,没有问题,一切都正常。但如果我给第二个打电话,什么也不会发生。

这一切是如何运作的,我有什么不了解的吗?

静态方法相互调用c#时出现问题

.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带我度过难关!