Actualmente tengo un problema en un ArcObjects ArcMap add-in donde mis controladores de eventos son aparentemente al azar ser desenganchado del evento que estoy tratando de atrapar. He pasado algún tiempo buscando una manera de listar todos los delegados actualmente asignados para el evento, pero no puedo encontrar una manera de llamar Delegate.GetInvocationList() desde la interfaz del evento.
Cuando se crea mi complemento ejecuto lo siguiente para responder al evento SelectionChanged de ActiveView:
IActiveViewEvents_Event activeViewEvent = (IActiveViewEvents_Event)ArcMap.Document.FocusMap;
activeViewEvent.SelectionChanged += new IActiveViewEvents_SelectionChangedEventHandler(this.onSelectionChanged);
Ahora sé que este manejador de eventos se perderá cuando cambie la vista activa por lo que también tengo esto:
IDocumentEvents_Event documentEvent = (IDocumentEvents_Event)ArcMap.Document;
documentEvent.ActiveViewChanged += new IDocumentEvents_ActiveViewChangedEventHandler(this.onActiveViewChanged);
que llama al código anterior para volver a añadir el manejador del evento SelectionChanged.
A intervalos aparentemente aleatorios mi aplicación deja de responder al evento SelectionChanged. Me detengo en todos los errores CLR así que estoy seguro de que no es una excepción silenciosa que está deshabilitando mi complemento.
Lo que realmente me gustaría es ser capaz de inspeccionar los delegados asignados al evento SelectionChanged y ver si el mío necesita volver a agregar, pero hasta ahora no hay alegría.
Cualquier sugerencia sobre qué puede estar fallando o cómo inspeccionar los manejadores de eventos asignados sería MUY apreciada.
EDITAR:
Desde entonces he descubierto un patrón para la locura. Mi herramienta sólo se ejecutará dentro de una sesión de edición si las características están seleccionadas. Una forma de replicar este comportamiento es 1) iniciar una sesión de edición 2) seleccionar algunas características 3) ejecutar mi herramienta - copia los elementos seleccionados de una capa a otra 4) parar la edición (no importa si guardo mis ediciones o no) 5) Ahora el evento de selección cambiada ya no es manejado
¿Puede alguien decirme por qué al iniciar y luego detener la edición se desacoplarían mis manejadores de eventos de cambio de selección?