Was soll übergeben werden, für die BeginInvoke-s @ - Objekt parameter?
Habe ich einen Fall delegieren, der wie folgt definiert ist:
public delegate void CallbackDelegate(Data data);
public event CallbackDelegate OnDataComplete;
Ich Hebe das Ereignis asynchron:
//Raise the OnDataComplete event
OnDataComplete.BeginInvoke(new Data(), null, null);
Anschließend die Signatur von BeginInvoke
aussieht:
IAsyncResult CallbackDelegate.BeginInvoke(Data data, AsyncCallback callback, object @object)
In den meisten Beispielen, die ich gesehen habe BeginInvoke
als @object
parameter null
, aber ich kann nicht finden die Dokumentation, die erklärt, was ist der Zweck dieses Parameters.
Also, was ist der Zweck dieses Parameters? Was können wir nutzen?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Es ist so, dass Sie weitergeben können alle relevanten Informationen von Ihrem Methode, um den callback. Da hat C# eine lambda-Ausdrücke und seit Delegierten können einen Status haben, manchmal ist es nutzlos, und Sie können nur übergeben Sie null. Aber es ist ein bisschen ähnlich wie
Control.Tag
, und es Ihnen ermöglicht, Informationen zu den Rückruf, dass es vielleicht praktisch finden.Update:
Der Ursprung, warum es überhaupt existiert, geht zurück auf Sprachen, hatten nur Funktionszeiger, mit keine Schließung. (Vielleicht möchten Sie sich das Wort "Schließung"... ich kann es nicht erklären sehr prägnant.) In C gibt es die Funktion nur Zeiger und nicht-Delegierten; daher, Funktionszeiger können nicht halten Sie Stand. Also, wenn Sie ein callback, der angerufene Ihnen geholfen, durch die übergabe einer zusätzlichen Zeiger für Sie, so könnte man die übergabe der Daten an Ihren Rückruf, der es brauchen könnte. In .NET, diese sind weniger nötig (weil die Delegierten haben
Target
Objekte und kann hold-Zustand), aber manchmal sind Sie praktisch, und das ist, wo Sie kommen aus.Control.Tag
ist hilfreich.Können Sie alles, was Sie wollen dort. In den AsyncResult-Methode können Sie diese abrufen, Wert mit IAsyncResult.AsyncState. Es ist es für Ihren Gebrauch.
Das ist nur ein Status-Objekt, das endet in IAsyncResult.AsyncState, die abgerufen werden können, die in Ihrem AsyncCallback-code. Ein bisschen wie die ThreadPool.QueueWorkItem(WaitCallback -, Objekt).