2008-10-19 9 views
5

Je suis un débutant à WPF et j'ai quelques questions sur l'intégration de WPF et Windows Forms.WPF avec Windows Forms - STAThread

J'ai une application Visual C# Windows Forms existante. Je voudrais l'intégrer avec une fenêtre de WPF, qui peut être montrée sur un clic de bouton. Cela n'était pas possible car WPF s'attend à ce que le thread appelant soit un STAThread et par défaut WinForm suppose que le thread est un MTAThread. J'ai essayé de générer un nouveau thread avec un état d'appartement de STAThread pour appeler l'interface utilisateur de WPF, mais cela n'a pas fonctionné. J'ai essayé d'utiliser la méthode Dispatcher.BeginInvoke et Background Worker, mais aucun d'eux n'a résolu le problème.

1) Peut-on faire un appel à la fenêtre/contrôle WPF sans marquer le Main comme un STAThread? Si c'est possible, quelqu'un peut-il me diriger vers une direction appropriée? 2) Si le seul moyen d'y parvenir est de faire du thread principal un STAThread, cela aura-t-il un impact sur les performances générales/la réactivité de l'application.

Merci d'avance.

Répondre

8

Je pense que la solution la plus simple consiste à exécuter votre thread WinForms dans une STA. Il n'y a rien de mal à avoir une application winforms STA thread (c'est en fait souvent la valeur par défaut).

Vous pouvez résoudre ce problème en ajoutant la ligne suivante à la méthode principale de votre programme:

[STAThreadAttribute] 
static void Main(string[] args) 
+1

En fait STA est nécessaire pour glisser-déposer OLE et certains composants COM interface pour travailler .. – Gishu