2012-07-20 2 views
1

Nous avons la méthode suivante dans notre application pour afficher les boîtes de dialogue. La méthode est appelée à partir du thread UI et des threads non UI. Est-il correct d'appeler InvokeRequired sur messageDialog pour s'assurer que la boîte de dialogue sera affichée sur le thread d'interface utilisateur?InvokeRequired sur Dialog nouvellement créé

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

Répondre

4

Non, InvokeRequired ne retourneront jamais vrai parce que MessageDialog est construit sur le fil que vous exécutez sur. En outre, InvokeRequired retournera toujours false jusqu'à ce que le descripteur du contrôle soit créé, ce qui n'arrivera que plus tard (voir MSDN). Assurez-vous d'appeler toujours ShowMessageDialog à partir du thread de l'interface utilisateur ou de créer un ShowMessageDialog pour accéder au thread de l'interface utilisateur, par exemple pour enregistrer un ISynchronizeInvoke. Je pense que le premier est une meilleure solution.

Questions connexes