0

我正在尝试替换我的应用程序中的所有 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)

而这个呼唤另一个

(二)

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

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

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

4

2 回答 2

3

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

于 2013-08-23T20:47:43.063 回答
1

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

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

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

再次感谢@Dan 和@ChrisSinclair 引导我完成它!

于 2013-08-23T21:18:43.397 回答