c# WPF con Windows Form-STAThread



winforms (1)

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

Ho un'applicazione Windows Form di Visual C # esistente. Mi piacerebbe integrarlo con una finestra WPF, che può essere mostrata con un clic del mouse. Questo non era possibile in quanto WPF si aspetta che il thread chiamante sia un STAThread e, per impostazione predefinita, WinForm presuppone che il thread sia un MTAThread. Ho provato a generare una nuova discussione con uno stato di appartamento di STAThread per chiamare l'interfaccia utente di WPF ma non ha funzionato. Ho provato a utilizzare anche il metodo Dispatcher.BeginInvoke e Background Worker, ma nessuno di loro ha risolto il problema.

1) Possiamo 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 un STAThread, ci sarà un impatto sulla performance generale / reattività dell'applicazione.

Grazie in anticipo.


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

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

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




sta