2010-05-26 13 views
6

ho un problema serio con la mia applicazione WPF. Ho realizzato una libreria di controllo WPF da utilizzare come componente aggiuntivo in MS Office 2007.WPF Ottieni thread UI o come mostrare una finestra da thread NON-UI

La classe WPF viene creata dall'host e crea una barra degli strumenti con alcuni pulsanti in MS Office. Facendo clic su un pulsante appare la finestra wpf. Il problema è che ricevo sempre il seguente errore: "Il thread chiamante deve essere STA, perché molti componenti dell'interfaccia utente richiedono questo" La mia funzione principale è contrassegnata come [STAThread].

Sembra che l'evento button_Click venga eseguito in un altro thread rispetto all'interfaccia utente.

Ho provato a utilizzare un dispatcher, ma non ha funzionato.

Dispatcher.CurrentDispatcher.Invoke(
       System.Windows.Threading.DispatcherPriority.Normal, 
       new Action(
       delegate() 
       { 
    wpfform wf = new wpfform(); 
    wf.ShowDialog(); 
    )); 

Penso che il modulo abbia un dispatcher sbagliato, ma non lo so esattamente. Successivamente ho provato ad avviare la finestra in un thread separato di sta e unire il thread, ma non ha funzionato neanche questo. Come ho rimosso l'attributo [STAThread] dalla funzione principale, la finestra è stata avviata, ma non sono riuscito ad accedere all'ufficio (perché sono in un thread separato).

Thread workerThread = new Thread(_ShowDialog); 
workerThread.SetApartmentState(ApartmentState.STA); 
workerThread.Start(); 
workerThread.Join(); 

È posible per determinare il thread UI e creare un dispatcher di questa discussione, o come posso tornare al thread UI.

Quindi, per favore aiutatemi. Grazie per le vostre risposte.

risposta

8

Sarà necessario utilizzare il dispatcher dell'interfaccia utente dell'applicazione. Provare a utilizzare:

Application.Current.Dispatcher.Invoke(...) 
+1

Credo che il nome predefinito per Applicazione sia App nelle applicazioni WPF. – DEHAAS

+0

Sfortunatamente Application.Current è null :(Qualche altra idea? – MarkusEm

Problemi correlati