In System.ComponentModel gibt es eine Klasse namens CancelEventArgs, die ein Cancel-Member enthält, das in Ereignislistenern festgelegt werden kann. In der Dokumentation zu MSDN wird erläutert, wie Sie Ereignisse aus einem Listener abbrechen können, aber wie kann ich diese verwenden, um meine eigenen abbrechbaren Ereignisse zu implementieren? Gibt es eine Möglichkeit, das Cancel-Mitglied zu überprüfen, nachdem jeder Listener ausgelöst wurde, oder muss ich warten, bis das Ereignis alle seine Listener ausgelöst hat?Wie implementiere ich ein abbrechbares Ereignis?
9
A
Antwort
16
jeden Zuhörer wiederum zu überprüfen, müssen Sie die Handler über GetInvocationList manuell erhalten:
class Foo
{
public event CancelEventHandler Bar;
protected void OnBar()
{
bool cancel = false;
CancelEventHandler handler = Bar;
if (handler != null)
{
CancelEventArgs args = new CancelEventArgs(cancel);
foreach (CancelEventHandler tmp in handler.GetInvocationList())
{
tmp(this, args);
if (args.Cancel)
{
cancel = true;
break;
}
}
}
if(!cancel) { /* ... */ }
}
}
Verwandte Themen
- 1. Wie implementiere ich ein Touch-Ereignis für meine Anwendung?
- 2. Wie implementiere ich ein Voting-System?
- 3. Wie implementiere ich ein dateibasiertes Wörterbuch?
- 4. Wie implementiere ich jquery.sound.js?
- 5. Wie implementiere ich `prepareForReuse`?
- 6. Wie implementiere ich JDatePicker
- 7. Wie implementiere ich IValidatableObject?
- 8. Wie implementiere ich IEnumerable?
- 9. Wie implementiere ich ein gutes Spielmenü in Java?
- 10. Wie implementiere ich einen personalisierten Event-Stream?
- 11. Wie implementiere ich einen Sprachwechsler?
- 12. Wie implementiere ich eine Delegiertenfabrik?
- 13. Wie implementiere ich bedingtes CSS?
- 14. Wie implementiere ich ein Chromeless-Fenster mit WPF?
- 15. Wie implementiere ich ein Meldungsfeld in einer Cocoa-Anwendung?
- 16. Java: Wie implementiere ich ein Warteschlangensystem, um Audioclips abzuspielen?
- 17. Wie implementiere ich IActivationForViewFetcher für ein Kind UserControl?
- 18. Wie implementiere ich ein Bit-Array in C/Objective C
- 19. Wie implementiere ich IWebPartField.Schema korrekt, wenn ein Zeichenfolgenfeld bereitgestellt wird
- 20. Wie implementiere ich ein Floating Window in meinem Navigator Controller?
- 21. Wie implementiere ich ein "Inhaltsverzeichnis" für meinen Quizcode?
- 22. Wie implementiere ich isChecked in Protractor
- 23. Wie implementiere ich andere Layouts als defaultLayout
- 24. Wie implementiere ich Revisionen mit neo4j?
- 25. Wie implementiere ich das Copy-Merkmal?
- 26. Wie implementiere ich OpenID in meiner Webanwendung?
- 27. Wie implementiere ich Gravatar in Laravel?
- 28. Wie implementiere ich Caching auf unveränderliche Weise?
- 29. Wie implementiere ich einen Comparator mit Generics?
- 30. Wie implementiere ich AVAssetImageGenerator.copyCGImageAtTime in schnellen
Während dieser Code funktioniert, ist, dass der normale Betrieb eines CancelEventHandler? Werden sie normalerweise nicht in einem BeforeX-, AfterX-Muster verwendet, wo wenn irgendetwas in Before Canel setzt, dann passiert X nicht, also wird AfterX nicht aufgerufen. Warum ist es wichtig, zu verhindern, dass andere Listener das Before-Ereignis erhalten? –
Ich möchte auch die Antwort auf den obigen Kommentar darüber wissen, warum es wichtig ist, andere Listener zu stoppen, die das Before-Ereignis erhalten. – MPavlak
Stellen Sie sich zwei Abonnenten für dasselbe Ereignis vor (im selben Objekt). Einer setzt 'cancel = true' und der zweite" cancel = false ". Was denkst du würde passieren? Die Antwort zeigt, wie man eine solche Situation vermeiden kann. Wenn mindestens ein Teilnehmer das Ereignis absagt, wird es abgebrochen. Zeitraum. – Joel