2013-08-23 36 views
0

我试图取代所有MessageBox.Show在我的应用程序了电话,所以我已经创建了下面定义的两个方法静态MSGBOX类:麻烦与静态方法调用海誓山盟C#

(一个)

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

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

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

+2

你打电话给第二个吗?编辑:和第一个。 –

+0

MsgBox.Show(“Message”,“Title”,MessageBoxButton.OK,MessageBoxImage.Information); – Skinner927

+1

对不起,斯金纳,你是怎么称呼第一个的?另外,你可以在一个新的/空白的项目中重现这个吗? (如果是这样,给我们提供代码来自己复制它?) –

回答

3

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

+1

我看了这个答案,觉得它可能会被误解(现在还不清楚)。但是 - 换句话说,你的第二个方法需要调用'MessageBox.Show',你的第一个方法需要调用'Show()'。在上面的代码中,无处不在调用“MessageBox.Show()”。反之亦然 - 你没有包含第一个例子的方法体。 – Steve

+0

谢谢史蒂夫! :)新人在这里!困难的部分是从我的头上得到真正的答案,但是我认为困惑在于认为一些新的代码可以被添加并且它会被自动调用。 – Paddy

+0

我从来没有在任何地方调用MessageBox.show,这个类正试图取代它。 – Skinner927

1

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

我已经改变了第二种方法的代码如下:

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

再次感谢@丹和@ChrisSinclair步行我通过了!