Ho iniziato di recente a programmare in WPF e ho riscontrato il seguente problema. Non capisco come utilizzare il metodo Dispatcher.Invoke()
. Ho esperienza in threading e ho fatto un paio di semplici programmi Windows Form dove ho appena usato ilModifica i controlli WPF da un thread non principale utilizzando Dispatcher.Invoke
Control.CheckForIllegalCrossThreadCalls = false;
Sì, lo so che è piuttosto scadente, ma questi erano semplici applicazioni di monitoraggio.
Il fatto è che ora sto facendo un'applicazione WPF che recupera i dati in background, avvio un nuovo thread per effettuare la chiamata per recuperare i dati (da un server web), ora voglio visualizzarli sul mio WPF modulo. Il fatto è che non posso impostare alcun controllo da questo thread. Neanche un'etichetta o niente. Come può essere risolto?
commenti La risposta:
@Jalfp:
Quindi io uso questo metodo Dispatcher nel 'nuovo battistrada' quando ricevo i dati? O dovrei fare in modo che un lavoratore in background recuperi i dati, li metta in un campo e inizi un nuovo thread che aspetta che questo campo venga riempito e chiama il dispatcher per mostrare i dati recuperati nei controlli?
È possibile liberarsi della 'nuova azione (' parte, e semplicemente usare un'espressione lambda: DispatcherPriority.Background,() => = 50 this.progressBar.Value – jrista
Sì Non so perché ho messo un Azione qui: p – japf
Quindi, quando ottengo i dati, utilizzo questo metodo di Dispatcher nel "nuovo battistrada" oppure devo fare in modo che un lavoratore in background recuperi i dati, li metta in un campo e inizi un nuovo thread che aspetta finché questo campo non è riempito e chiamare il dispatcher per mostrare i dati recuperati nei controlli? –