Devo sapere se le chiamate Control.BeginInvoke e Control.Invoke verranno eseguite nell'ordine in cui sono chiamate.Più chiamate Control.BeginInvoke/Invoke verranno eseguite in ordine?
Ho il seguente scenario:
- thread UI è bloccato
- filo WCF chiama Control.BeginInvoke
- filo WCF chiama Control.Invoke (o eventualmente BeginInvoke nuovo)
- thread UI è sbloccato
- ??
L'ordine di esecuzione della fase 1-4 è garantito essere nell'ordine indicato (tecnicamente l'ordine non è garantito essere così, ma la domanda che ho è rilevante solo se l'ordine come mostrato).
La domanda che ho è se non v'è alcuna possibilità che la chiamata Invoke/BeginInvoke al punto 3 viene eseguito prima che la chiamata BeginInvoke al punto 2?
Inoltre, si prega di non commentare bloccare il thread UI.
Quindi il commento che indica che le chiamate Invoke sincrone possono essere eseguite prima che la chiamata BeginInvoke asincrona non si applichi a Control.BeginInvoke, ma si applicherà a Delegate.BeginInvoke? Potete fornirmi un collegamento che spieghi questo? – cornergraf
La tua affermazione è corretta. Ho aggiunto una breve spiegazione del messaggio UI pump nella risposta, stranamente non riesco a trovare una fonte ufficiale che lo dichiari. –
Ok, grazie. Conosco il MessagePump in generale, ma ho pensato che le chiamate BeginInvoke/Invoke potessero potenzialmente avere un comportamento speciale per qualsiasi motivo e volevo essere sicuro – cornergraf