2013-05-22 1 views
0

J'ai une boîte de message personnalisé dans mon application WPF. Le problème est: Cette boîte de message n'affiche pas lorsque je l'ai appelée dans une classe qui n'est pas dérivée de Windows. Il n'y a pas d'erreur de compilation. Les références sont ajoutées correctement.Boîte de message personnalisée ne pas entrer dans wpf

Je n'appelle aucun composant de l'interface utilisateur dans cette classe.

Il se produit une exception lors du débogage: « Le thread appelant doit être STA parce que de nombreux composants de l'interface utilisateur exigent cette »

+0

Montrez-nous un peu de code que vous avez fait. – Batuu

+0

Montrez votre code, s'il vous plaît –

+6

J'ai fait un avion et le problème est qu'il ne peut pas voler. –

Répondre

4

J'ai eu le même problème, le problème est que lorsque nous créons notre MessageBox personnalisé, il découle de l'interface utilisateur des composants comme Windows peut-être, et quand nous essayons de créer et afficher notre MessageBox personnalisé à partir d'un thread que nous avons créé par code dans notre application, nous obtenons l'erreur:

"Le thread appelant doit être STA car de nombreux composants UI exiger ceci ".

Comme « mottukutty » a commenté à son propre problème, la solution consiste à utiliser Dispatcher pour montrer notre MessageBox personnalisé de l'application, quelque chose comme:

public partial class MessageBox : Window 
{ 
    private static MessageBox _messageBox; 

    public static MessageBoxResult Show(string message, MessageBoxType type, 
     string okText = null, string yesText = null, string noText = null) 
    { 
     Application.Current.Dispatcher.Invoke(show); 

     void show() 
     { 
      _messageBox = new MessageBox(message, type, okText, yesText, noText); 

      _messageBox.ShowDialog(); 
     } 

     return _messageBox.Result; 
    } 
} 
Questions connexes