Was sollte für den @object-Parameter von BeginInvoke übergeben werden?

8

Ich habe einen Ereignisdelegaten, der wie folgt definiert ist:

%Vor%

Ich hebe das Ereignis asynchron an:

%Vor%

Anschließend sieht die Signatur von BeginInvoke wie folgt aus:

%Vor%

In den meisten Beispielen habe ich BeginInvoke mit dem Parameter @object aufgerufen, der null ist, aber ich kann die Dokumentation nicht finden, die erklärt, was der Zweck dieses Parameters ist.

Was ist der Zweck dieses Parameters? Wofür können wir es verwenden?

    
Kiril 21.01.2011, 20:14
quelle

3 Antworten

8

Damit können Sie relevante Informationen von Ihrer Methode an den Rückruf weitergeben. Da C # Lambda-Ausdrücke hat und Delegaten einen Zustand haben können, ist dies manchmal nutzlos und Sie können einfach null übergeben. Aber es ist ein bisschen ähnlich zu Control.Tag , und es können Sie dem Callback Informationen geben, die es nützlich finden könnte.

Aktualisierung:

Der Ursprung dessen, warum es überhaupt existiert, geht zurück auf Sprachen, die nur Funktionszeiger hatten, ohne Abschluss. (Sie könnten das Wort "Schließung" nachschlagen wollen ... ich kann es nicht sehr knapp erklären.) In C gibt es nur Funktionszeiger und keine Delegierten; Daher können Funktionszeiger den Status nicht halten. Wann immer Sie einen Rückruf zur Verfügung stellten, half Ihnen der Angerufene, indem er einen zusätzlichen Zeiger für Sie übermittelte, damit Sie Daten an Ihren Rückruf weiterleiten konnten, den er möglicherweise benötigt. In .NET sind diese weniger notwendig (weil Delegaten Target -Objekte haben und den Status halten können), aber manchmal sind sie nützlich und von dort kommen sie her.

    
Mehrdad 21.01.2011, 20:18
quelle
8

Sie können dort alles bereitstellen, was Sie wollen. In der AsyncResult-Methode können Sie diesen Wert mit IAsyncResult.AsyncState abrufen. Es ist für dich da.

    
Tergiver 21.01.2011 20:24
quelle
4

Das ist nur ein Zustandsobjekt, das in IAsyncResult.AsyncState endet kann in Ihrem AsyncCallback-Code abgerufen werden. Ein bisschen wie das ThreadPool.QueueWorkItem (WaitCallback, Object) .

    
sisve 21.01.2011 20:18
quelle