Ereignisse werden im Hauptthread geladen und ausgeführt, und wenn das erste Ereignis im Hauptthread nicht abgeschlossen ist, kommt man zum zweiten Ereignis – genau wie bei anderen Programmen im Hauptthread – wartet, bis das vorherige fertig verarbeitet ist, bevor das nächste oder ein anderes Programm oder Ereignis im Hauptthread verarbeitet wird.
Das obige ist, dass ich selbst ein Objekt kapselt habe, und im Objekt habe ich selbst ein Ereignis eingeschlossen.
Ich verarbeite Daten im Rahmen des Abonnements auf Ereignisse, wie zum Beispiel den Bildannotationsteil,
Weil das Ereignis, das ich abonniert habe, eine Read-txt-Datei war und meine TXT-Datei 50.000 Zeilen hatte, wodurch die Event-Methode 50.000 Mal ausgelöst wurde.
Als ich dann das Programm ausführte, stellte ich fest, dass meine Benutzeroberfläche sich in einem Zustand der Suspendierung befand, und ich wusste, dass dort ein Problem vorliegen musste.
Zunächst dachte ich, es sei die Manipulation der UI-Steuerungen in der Methode, die den falschen Tod verursacht hat.
Dann stellte sich Schritt für Schritt heraus, dass beim Hinzufügen der Daten bereits in einen Zustand der Suspendierung eingetreten war.
Warum??? Schließlich habe ich im Internet herausgefunden, dass das Event im Hauptthread ist und wenn das erste Event nicht verarbeitet wird, wird die Ausführung des nächsten Events blockiert.
Im Allgemeinen verstand ich, was ich befohlen habe, um es klar zu sagen: 50.000 Ereignisse führten dazu, dass das Programm blockiert wurde, und dann geriet ich in einen Zustand der Suspendierung.
Lösung:
Für einige einfache Ereignisse, die nicht zur Ausführung einer großen Anzahl von Ereignismethoden führen, können direkt in die Ereignismethode geschrieben werden.
Für eine große Anzahl von Ereignismethoden hoffe ich, dass du einen Thread eröffnest, um damit umzugehen, wie zum Beispiel: Socket oder HTTPLISTENER usw. (die Datenmenge ist klein und du kannst sie nicht sehen, sobald die Datenmenge groß ist, haha, stirbt sie direkt)
|