Heim > Artikel > Backend-Entwicklung > Grafisches Codebeispiel für einen asynchronen Aufruf eines C#-Delegaten
Asynchrone Aufrufe von Delegierten
Manchmal, wenn Sie möchten, dass ein Delegierter einen Komplex und eine bestimmte Zeit abschließt -Aufwändige Aufgabe Bei der Ausführung von Aufgaben sind synchrone Anrufe keine gute Wahl, da Benutzer mit langweiligem Zeitaufwand und langem (relativ gesehen) Warten. Zu diesem Zeitpunkt zeigt der asynchrone Aufruf des Delegaten seine Vorteile. Der asynchrone Aufruf des Delegaten C# wird auch durch beginInvoke gekapselt und endInvke zum Abschließen. Nachfolgend finden Sie ein Beispiel.
1. definiert einen Delegaten, myDelegate
2. Für ein externes Abonnement ist ein Ereignis definiert 3.
Schrittweite, Testfeld4.
doIt Methode, jedes Mal Es heißt: Inkrement erhöht sich von selbst, wenn der Wert 5 ist. Bei wird das Ereignis asynchron
Der entscheidende Punkt ist dieser Code:
BeginInvoke
enthält vier Parameter:
IAsyncResult result = this.callBack.BeginInvoke (new AsyncCallback( (ia) => { MessageBox.Show("completed"); AsyncResult ar = (AsyncResult)ia; MyDelegate md = ar.AsyncDelegate as MyDelegate; int r = md.EndInvoke(ia); MessageBox.Show(r.ToString() + ia.AsyncState); }), "message"); MessageBox.Show("begin invoke");
AsyncCallback Objekt: Dieser Parameter bedeutet, ihm mitzuteilen, was als Nächstes zu tun ist, wenn der Rückruf abgeschlossen ist. Sie müssen ihm also eine Methode übergeben. neuer AsyncCallback(
Hier eine Methode erhalten, hier habe ich LambdaAusdruck verwendet) . ObjektObjekt: Parameter, die an die aufgerufene Methode übergeben werden, wenn der Rückruf endet.
AsyncResult ar = (AsyncResult)ia;//// Holen Sie sich das eingehende IasyncResult und konvertieren Sie es in ein AsyncResult-Objekt
MyDelegate md = ar.AsyncDelegate as MyDelegate;////get callBackObject
int r = md.EndInvoke(ia);////Beende den Aufruf des Delegaten und erhalte den Rückgabewert
MessageBox.Show(r.ToString() + ia.AsyncState);////Überprüfen Sie, ob der Rückgabewert erhalten wird
OK, nun, da der asynchrone Delegat definiert wurde, besteht der nächste Schritt darin, Folgendes aufzurufen:
Codebeschreibung:
Neu einTimer und ein asyntroniseDelegate-Objekt.
Abonnieren Sie das callBack-Ereignis. Schließlich gibt die Methode eine 1 .
Verwenden Sie den Timer, um den Vorgang der Inkrementierung abzuschließen . Sammeln Sie 1 pro Sekunde.
Wenn sich das Inkrement auf 5 summiert, wird der Das Rückruf-Ereignis wird ausgelöst. Zu diesem Zeitpunkt wird es aufgefordert, eine sehr komplexe Aufgabe auszuführen, die 10 Milliarden Mal wiederholt.
Nach dem Ausführen wird das Eingabeaufforderungsfeld angezeigt , gefolgt von , danach Etwa 2-3 Sekunden erscheint das Eingabeaufforderungsfeld und dann und (sichtbarer, asynchroner Aufruf) Endlich haben wir erfolgreich den Rückgabewert der Methode erhalten)
Das Obige ist der asynchrone Aufruf des C#-Delegierten. Inhalt der Grafik Codebeispiele. Weitere verwandte Inhalte finden Sie auf der chinesischen PHP-Website (www.php.cn).