静态方法相互调用麻烦c#

时间:2013-08-23 20:23:10

标签: c# static-methods

我正在尝试替换我的应用程序中的所有MessageBox.Show调用,因此我创建了一个静态MsgBox类,其中定义了以下两种方法:

(一个)

public static MessageBoxResult Show(Window owner, string messageBoxText, string caption = "",
                                            MessageBoxButton button = MessageBoxButton.OK,
                                            MessageBoxImage icon = MessageBoxImage.None,
                                            MessageBoxResult defaultResult = MessageBoxResult.None)

这个调用另一个

的那个

(2)

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);
}

所以问题是如果我直接调用第一个,没有问题,一切正常。但如果我打电话给第二个没有任何反应。

有什么我不明白这一切是如何运作的吗?

2 个答案:

答案 0 :(得分:3)

.Show重载方法用于显示您想要的任何类型的MessageBox。 您正在返回一个未应用于任何MessageBox的.Show,因此您需要获取此返回值并将其用作MessageBox.Show(whateverReturned)

答案 1 :(得分:1)

看起来答案是我试图从不允许的后台线程获取MainWindow。

我已将第二个方法代码更改为:

Window mainWindow = null;
UiDispatcher.Invoke(delegate { mainWindow = Application.Current.MainWindow; }, DispatcherPriority.Normal);
return Show(mainWindow, messageBoxText, caption, button, icon, defaultResult);

再次感谢@Dan和@ChrisSinclair带我走过它!