2012-07-20 58 views
1

我們在我們的應用程序中使用以下方法來顯示對話框。該方法從UI線程和非UI線程調用。調用messageDialog上的InvokeRequired以確保該對話框將顯示在UI線程上嗎?因爲MessageDialog是正在執行的線程上構建在新創建的對話框上調用所需

public static DialogResult ShowMessageDialog(MessageInfo messageInfo,ButtonFlags flags,IconType iconId,HorizontalAlignment btnAlignment,bool topMost) 
{ 
DialogResult retDialogResult = DialogResult.None; 

MessageDialog messageDialog = new MessageDialog(messageInfo.GetLanguageBasedFieldValue(MessageInfoField.Message), iconId); 
messageDialog.TopMost = topMost; 

// Initialize the layout of Message Dialog. 
messageDialog.Initialize(); 
retDialogResult = messageDialog.ShowDialog(); 

return retDialogResult; 
} 

回答

4

沒有,InvokeRequired永遠不會返回true。此外,InvokeRequired將始終返回false,直到控件的句柄被創建,直到後來才發生(請參閱MSDN)。

要麼確保您始終從UI線程調用ShowMessageDialog,要麼有一個方法讓ShowMessageDialog進入UI線程,例如存儲ISynchronizeInvoke。我認爲前者是更好的解決方案。

相關問題