Il richiamo di un thread dell'interfaccia utente da un thread di lavoro viene discusso molte volte e sappiamo perché utilizzare BeginInvoke() anziché Invoke(). Recentemente ho pubblicato this question e dopo aver fatto qualche ricerca ho scoperto che ci sono almeno tre modi diversi (internamente potrebbero essere uguali) per invocare (in modo asincrono) qualcosa sul thread dell'interfaccia utente.control.BeginInvoke() Vs Dispatcher Vs SynchronizationContext Vs .. - AFFIDABILITÀ
Control.BeginInvoke()
- Utilizzando
SynchronizatoinContext
Classe - Utilizzando
Dispatcher.BeginInvoke(priority..)
qualcuno può dirmi che è un modo affidabile per chiamare in modo asincrono un metodo per essere eseguito su thread dell'interfaccia utente. Qualche esperienza? Vedo che Dispatcher.BeginInvoke ha una componente prioritaria, lo rende più affidabile?
Contesto:
stiamo usando someControl.BeginInvoke()
ma ho notato che a volte (purtroppo solo in ambiente di produzione all'utente finale) il delegato passò a BeginInvoke is
mai eseguito che mi fa credere che il messaggio dopo che si crea è perdersi. Vogliamo un modo affidabile per comunicare al thread dell'interfaccia utente. control.Invoke()
a volte si blocca l'interfaccia utente, quindi non vogliamo nemmeno andare lì.
Non confondere WinForms con WPF. – SLaks
Sto avendo un problema simile ... per caso hai risolto il problema? –
stesso qui, qualsiasi aggiornamento? – Pedro77