Differenza tra Delegate.Invoke e Delegate ()

delegate void DelegateTest(); DelegateTest delTest; 

Qual è la differenza tra la chiamata delTest.Invoke() e delTest() ? Entrambi eseguiranno il delegato sul thread corrente, giusto?

La forma delTest() è un helper del compilatore, sotto c’è davvero una chiamata a Invoke() .

È corretto. Entrambi hanno lo stesso identico risultato.

Dato che hai correttamente inizializzato delTest ovviamente.

La risposta di Richard è corretta, tuttavia a partire da C # 6.0, c’è una situazione in cui l’utilizzo di Invoke() direttamente potrebbe essere vantaggioso a causa dell’aggiunta dell’operatore condizionale nullo . Per i documenti MS

Un altro uso per l’accesso ai membri condizionali nulli sta richiamando i delegati in modo thread-safe con molto meno codice. Il vecchio modo richiede codice come il seguente:

 var handler = this.PropertyChanged; if (handler != null) handler(…); 

Il nuovo modo è molto più semplice:

 PropertyChanged?.Invoke(…) 

Il nuovo modo è thread-safe perché il compilatore genera codice per valutare PropertyChanged una sola volta, mantenendo il risultato in una variabile temporanea. È necessario chiamare esplicitamente il metodo Invoke perché non esiste una syntax di chiamata delegato null-PropertyChanged? (E).