C# Wie synchrone Methode, die auf Ereignisse warten, um Feuer?

Habe ich benutzerdefinierte browser-Klasse, die in der Lage brennen eine Menge von Ereignissen je nach Seite gestöbert Zustand. Jetzt muss ich einige Operationen auf dieser web-Seite mit meinem browser, aber Sie haben zu laufen sequentialy, jeder Betrieb muss die Daten von der vorherigen.
Der sauberste Weg dies zu erreichen ist, um eine synchrone Methoden warten auf browser, um seine Arbeit zu tun. Ich machte es so:

public incomplete class MyClass {
    //(...) lots of stuff comes here, it's a web browser :)
    public bool MySyncMethod(object data) {
        bool success = false;
        bool wait = true;
        MyEventHandler = new EventHandler((o, e) => {
            data = MyEventProvidedData; //belive me, it's threre when it fired
            success = true; //let's assume it always succeed
            wait = false; //now we can move on to the rest of our long chain
        });
        //(...) here I have some more event handlers which can end my method...
        MyAsyncMethod(data); //so it started and will fire MyEventHandler soon
        while (wait) System.Threading.Thread.Sleep(100);
        return success;
   }
}

Aber irgendwas scheint hier falsch. Wenn ich threads, ich würde nur Platz myThread.Join() und nicht in meiner while-Schleife und es würde warten, bis mein thread abgeschlossen. Ist es etwas ähnlich-Thread.Join() kann verwendet werden, mit der Ereignisse ausgelöst durch die Kontrollen? Gibt es etwas zu verwenden, anstatt der while-Schleife? Ist es ein sauberer Weg, um mein Ziel erreichen? Der obige code funktioniert in der realen Anwendung, aber ich denke, es ist nicht optimal.

Und es gibt einen guten Grund, warum ich nicht verwenden threads hier - die gesamte Kommunikation zwischen threads und ActiveX-Steuerelement muss thread-sicher, und das ist nicht trivial zu erreichen. Ja, ich habe versucht 🙂 Dieser code war die Hölle, zu Debuggen, also beschloss ich Sie neu zu schreiben.

  • unvollständige Klasse?
  • Was ist incomplete Klasse ?
  • Haben Sie einen Blick auf die Beispiel-code zu Überwachen.Puls? Hier auf der MSDN-Website: msdn.microsoft.com/en-us/library/...
InformationsquelleAutor Harry | 2012-06-06
Schreibe einen Kommentar