Wie kann ich wissen, ob eine .net-event ist bereits behandelt?
Ich geschrieben habe, etwas code, um ein Ereignis zu behandeln, wie folgt:
AddHandler myObject.myEvent, AddressOf myFunction
Es schien, dass alles lief auf den ersten, aber bei mir lief der debugger habe ich herausgefunden, dass oft myFunction
würde mehrmals starten, jedes mal, wenn myObject.myEvent
gefeuert. Ich dachte mir, dass ich erlaubt hatte, den code zum hinzufügen der Ereignishandler ausgeführt werden, mehr als einmal, was in diesem Verhalten.
Gibt es eine Möglichkeit kann ich so etwas tun?
If myObject.myEvent is not handled Then
AddHandler myObject.myEvent, AddressOf myFunction
End If
Du musst angemeldet sein, um einen Kommentar abzugeben.
Vorausgesetzt, es ist nicht dein code, der die Veröffentlichung einer Veranstaltung, können Sie nicht. Die Idee ist, dass die Teilnehmer voneinander isoliert sind - Sie können nicht herausfinden, über andere Ereignis-Abonnenten, die das Ereignis auslösen, sich selbst usw.
Wenn das problem ist, dass du bist indem Sie Ihre eigenen handler mehrmals, Sie sollten in der Lage sein, es zu reparieren sich selbst, indem Sie verfolgen, ob Sie Hinzugefügt haben, müssen Sie einen handler. Steven ' s Idee mit dem entfernen der hf wird vor der Zugabe ist es ein interessanter workaround: es gilt zu versuchen, handler entfernen, auch wenn es nicht abonniert ist. Allerdings würd ich erachte dies als einen workaround, um Ihre app nicht wirklich zu wissen, was Sie tun sollten. Es ist eine sehr schnelle Kurzfristige Lösung, aber ich würde besorgt sein, es zu verlassen für längere Sicht.
Entweder:
Don ' T add your handler mehr als
einmal.
Versuch zum entfernen der handler nur
vor dem hinzufügen.
Gibt es keine Möglichkeit zu sagen, dass ein handler ist bereits befestigt, aber Sie können sicher aufrufen, RemoveHandler auf das Ereignis vor dem Aufruf von AddHandler. Wenn es nicht bereits ein handler, RemoveHandler, haben keinen Effekt.
Ich weiß, dies ist eine alte post, aber wollte nur hinzufügen, eine Lösung für diejenigen, die Suche in diese Richtung...
VB.Net erstellt eine private member-variable in das Muster der
<YourEvent>Event
die Sie dann verwenden können, um gegen die Tests Nichts.Antwort stammt von hier: Bestimmen, ob ein Ereignis beigemessen wurde, noch
Speichern Sie Ihre event-handler-Ergebnisse in der Datenbank/session und Lesen Sie Sie dann wieder ein, um zu überprüfen, wenn ein Ereignis bereits bearbeitet wurde.
Ich weiß, ich bin ein paar Jahre zu spät, um das Spiel, aber man konnte immer Umfang eine Klasse variable, und legen Sie es nach der Tat. Dies ist nicht ein ganz gehärtet Weg, Dinge zu tun, aber es ist besser als einfach nur zu hoffen, dass Sie nicht etwas haben oder neu hinzufügen, jedes mal. In meinem Fall habe ich dies in einer WinForms app waren, ich wollte fügen Sie einen Ereignishandler für das ziehen und ablegen auf einem datagridview-Oberfläche. Ich wollte halt diese Funktionalität, wenn ein Teil von einem anderen datagridview war noch nicht vollständig ausgefüllt, dass es abhängig war.
So, wie es sein würde, diese:
Klasse
Konstruktor:
Methode, die bestimmt, Ausgabe:
Entfernen der hf und fügen Sie es. Auf diese Weise wird es niemals dupliziert werden. Vorsicht vor der null-Referenz-Fehler wenn das Objekt nicht vorhanden ist. Kam ich auf diese zu und kann passieren, wenn Sie das entfernen der handler außerhalb der sub, wo der handler erstellt wird.
Können Sie verwenden
IsHandleCreated
- Eigenschaft überprüfen Sie Ihre Veranstaltung bereits ein handle oder nicht.