Heim  >  Artikel  >  Backend-Entwicklung  >  Grafisches Codebeispiel für einen asynchronen Aufruf eines C#-Delegaten

Grafisches Codebeispiel für einen asynchronen Aufruf eines C#-Delegaten

黄舟
黄舟Original
2017-03-04 10:17:411629Durchsuche

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).


Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn