| 

.NET C# Java Javascript Exception

4
Kennt ihr einen einfachen Weg die Reihenfolge von EventHandlers zu ändern?

Ich habe sehr oft einen EventHandler, der die GUI updatet und einen anderen der später registriert wird wenn ein Werkzeug gestartet wird. Wenn ich dem Werkzeug die Gelegenheit geben will einen bestimmten Event zu erst zu behandeln, erstelle ich einen zweiten Event den ich EinEventFirst nenne. Ich finde diese Lösung aber unschön. Kann man die InvocationList irgendwie doch anpassen ohne alle EventHandlers neu von Hand in veränderter Reihenfolge anzuhängen?

EDIT:

oder noch ein anderer Gedanke: kann ich die InvocationList von hinten abarbeiten?
21.03.2011
pinchbeck 373 1 8
3 Antworten
2
Bezüglich Reihenfolge von EventHandler gibt es hier Order of event handler execution einige interessante Aussagen.
Auf diese Weise kann man die Reihenfolge zumindest ermittlen: Delegate.GetInvocationList Method
21.03.2011
Jürgen Luhr 7,1k 2 9
3
danke für die Vorschläge. ich habe es letztendlich so gelöst:
Delegate[] eventHandlers = (MyEvent as MulticastDelegate).GetInvocationList();
for (int i = (eventHandlers.Length - 1); i >= 0; --i)
{
(eventHandlers[ i ] as EventHandler)(this, EventArgs.Empty);
}
21.03.2011
pinchbeck 373 1 8
1
Eine Möglichkeit wäre, die add-/remove-Syntax für den Zugriff auf das Event zu benutzen und damit die Liste der registrierten Handler selbst zu verwalten.

Wie aber auch in dem von Jürgen verlinkten stackoverflow-Thread angemerkt wird: die Tatsache, dass Du eine bestimmte Reihenfolge einzuhalten versucht bist, deutet auf ein Design-Problem hin. Die Komponente, die das Event anbietet, sollte keine Annahmen darüber treffen, wer sich registriert, und die Event-Handler sollten, auch in der Reihenfolge der Ausführung, voneinander unabhängig sein. Gut möglich (dazu müßte man aber mehr über die Problemdomäne wissen), dass die Lösung mit den zwei getrennten Events die sauberere ist. Du kannst dann zumindest sauber dokumentieren, dass das eine Event vor dem anderen ausgelöst wird. Vielleicht fällt Dir auch noch ein schönerer Name für das erste Event ein, der ausdrückt, warum es zuerst ausgelöst wird (und nicht nur, das es so ist).
21.03.2011
Matthias Hlawatsch 13,2k 4 9

Stelle deine .net-Frage jetzt!
TOP TECHNOLOGIES CONSULTING GmbH