2013-08-23 38 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步行我通過了!