2011-01-21 15 views
8

Ho un delegato di evento che è definito come segue:Cosa deve essere passato per il parametro @object di BeginInvoke?

public delegate void CallbackDelegate(Data data); 
public event CallbackDelegate OnDataComplete; 

alzo l'evento in modo asincrono:

// Raise the OnDataComplete event 
OnDataComplete.BeginInvoke(new Data(), null, null); 

Successivamente, la firma di BeginInvoke assomiglia:

IAsyncResult CallbackDelegate.BeginInvoke(Data data, AsyncCallback callback, object @object) 

In la maggior parte degli esempi che ho visto è chiamata BeginInvoke con il parametro @objectnull, ma non riesco a trovare la documentazione che spiega qual è lo scopo di tale parametro.

Quindi qual è lo scopo di tale parametro? Per cosa possiamo usarlo?

risposta

8

È possibile inoltrare qualsiasi informazione rilevante dal metodo al callback. Poiché C# ha espressioni lambda e poiché i delegati possono avere uno stato, a volte questo è inutile e puoi semplicemente passare null. Ma è un po 'simile a Control.Tag, e ti permette di dare informazioni al callback che potrebbe trovare utile.


Aggiornamento:

L'origine del perché esiste anche risale a lingue che avevano solo puntatori a funzione, senza chiusura. (Potresti voler cercare la parola "chiusura" ... Non posso spiegarlo molto concisamente.) In C, ci sono solo i puntatori di funzione e non i delegati; di conseguenza, i puntatori di funzione non possono contenere lo stato. Quindi, ogni volta che hai fornito una richiamata, il callee ti ha aiutato passando un puntatore aggiuntivo per te, in modo da poter trasmettere i dati alla richiamata di cui potrebbe aver bisogno. In .NET, questi sono meno necessari (poiché i delegati hanno oggetti Target e possono contenere lo stato), ma a volte sono utili ed è da lì che provengono.

+1

+1 È parimenti utile il suo paragone con 'Control.Tag'. – Tergiver

8

È possibile fornire tutto ciò che si desidera lì. Nel metodo AsyncResult è possibile recuperare questo valore con IAsyncResult.AsyncState. È lì per il tuo uso.

Problemi correlati