Domanda

Sono un principiante di WPF e ho un paio di domande sull'integrazione di WPF e Windows Form.

Ho un'applicazione Visual C # Windows Form esistente. Vorrei integrarlo con una finestra WPF, che può essere visualizzata con un clic sul pulsante. Ciò non è stato possibile poiché WPF prevede che il thread chiamante sia un STAThread e per impostazione predefinita WinForm presuppone che il thread sia un MTAThread. Ho provato a generare un nuovo thread con uno stato dell'appartamento di STAThread per aver chiamato l'interfaccia utente WPF ma non ha funzionato. Ho provato a utilizzare il metodo Dispatcher.BeginInvoke e anche Background Worker, ma nessuno di loro ha risolto il problema.

1) È possibile effettuare una chiamata alla finestra / controllo WPF senza contrassegnare Main come STAThread? Se è possibile, qualcuno può indicarmi una direzione corretta? 2) Se l'unico modo per ottenere questo risultato è rendere il thread principale uno STAThread, ci sarà un impatto sulle prestazioni / reattività generali dell'applicazione.

Grazie in anticipo.

È stato utile?

Soluzione

Penso che la soluzione più semplice sia quella di far eseguire il thread WinForms in un STA. Non c'è nulla di sbagliato nell'avere un'app winforms thread STA (in realtà è spesso l'impostazione predefinita).

Puoi risolvere questo problema aggiungendo la seguente riga al metodo principale del tuo programma:

[STAThreadAttribute]
static void Main(string[] args)
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top