En System.ComponentModel, hay una clase llamada CancelEventArgs que contiene un miembro de cancelación que se puede establecer en los detectores de eventos. La documentación en MSDN explica cómo usar eso para cancelar eventos desde un oyente, pero ¿cómo lo uso para implementar mis propios eventos cancelables? ¿Hay alguna manera de verificar el miembro Cancelar después de que cada oyente dispara, o tengo que esperar hasta que el evento haya despedido a todos sus oyentes?¿Cómo implemento un evento cancelable?
9
A
Respuesta
16
Para comprobar cada oyente a su vez, es necesario obtener manualmente los controladores a través de GetInvocationList:
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) { /* ... */ }
}
}
Cuestiones relacionadas
- 1. ¿Cómo se crea un evento cancelable en vb.net
- 2. Cómo implementar hilo de trabajo cancelable
- 3. ¿Cómo implemento un sistema de votación?
- 4. ¿Cómo implemento un servidor OpenID en Rails?
- 5. ¿Cómo implemento referencias directas en un compilador?
- 6. ¿Cómo implemento un pincel personalizado en WPF?
- 7. ¿Cómo implemento un controlador basado en .inf?
- 8. ¿Cómo implemento un servicio de SMS?
- 9. ¿Cómo implemento MVCC?
- 10. ¿Cómo implemento IEnumerable?
- 11. ¿Cómo deshacerse de TransactionScope en async/await cancelable?
- 12. ¿Cómo implemento web2py en PythonAnywhere?
- 13. ¿Cómo implemento `cat` en Haskell?
- 14. ¿Cómo implemento un comando de apagado en un servidor WAI?
- 15. ¿Cómo establecer el diálogo de progreso como no cancelable cuando se gestiona como un fragmento?
- 16. ¿Cómo implemento el registro en un enum singleton?
- 17. ¿Cómo implemento una función Peek() en un DataReader?
- 18. ¿Cómo implemento seekg() para un istream/streambuf personalizado?
- 19. ¿Cómo implemento un procedimiento almacenado administrado sin usar Visual Studio?
- 20. ¿Cómo implemento quicksort usando un archivo por lotes?
- 21. ¿Cómo implemento un TextBox que muestra "Escriba aquí"?
- 22. ¿Cómo implemento un bucle de lectura Eval de F # (REPL)?
- 23. Java: ¿Cómo implemento un árbol genérico de búsqueda binaria?
- 24. ¿Cómo implemento un cuadro de mensaje en una aplicación Cocoa?
- 25. ¿Cómo implemento un gesto de saludo en kinect?
- 26. ¿Cómo implemento OpenID en mi aplicación web?
- 27. ¿Cómo implemento las revisiones con neo4j?
- 28. ¿Cómo implemento UITapGestureRecognizer en mi aplicación?
- 29. ¿Cómo implemento una colección en Scala 2.8?
- 30. ¿Cómo implemento una aplicación de escritorio Python?
Mientras que el código va a funcionar, es que el funcionamiento normal de un CancelEventHandler? ¿No se usan generalmente en un patrón BeforeX, AfterX, donde si algo en Before establece Canel, entonces X no ocurre, por lo que AfterX no se llama. ¿Por qué es importante evitar que otros oyentes reciban el evento Before? –
También me gustaría saber la respuesta al comentario anterior sobre por qué es importante evitar que otros oyentes reciban el evento Before. – MPavlak
Imagine dos suscriptores para el mismo evento (en el mismo objeto). Uno establece 'cancel = true' y el segundo" cancel = false ". ¿Qué crees que pasaría? La respuesta muestra cómo evitar tal situación. Si al menos un suscriptor cancela el evento, entonces se cancela. Período. – Joel