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.
Credo che il nome predefinito per Applicazione sia App nelle applicazioni WPF. – DEHAAS
Sfortunatamente Application.Current è null :(Qualche altra idea? – MarkusEm