3 votos

¿Cómo enumerar los delegados de eventos ActiveView SelectionChanged en ArcObjects .NET?

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?

2voto

Strelok Puntos 18453

Gracias por el interés en esta cuestión. Terminé usando un enfoque diferente que en realidad funciona mejor en mi situación y es más fiable.

En lugar de utilizar IActiveViewEvents::SelectionChanged Fui con IEditEvents::SelectionChanged ya que en realidad sólo necesitaba saber si la selección cambiaba durante la edición. Como el objeto editor nunca cambia el manejador del evento nunca se pierde por lo que no hay necesidad de reasignar el manejador.

Pasé un rato más probando el problema original y estoy bastante seguro de que es un problema ArcObjects como yo no era realmente capaz de replicar cada vez que el uso de la misma secuencia exacta de los acontecimientos.

Todavía me gustaría saber si se puede recuperar la lista de delegados para un evento ArcObjects pero por ahora mi problema original está resuelto.

0voto

mookid8000 Puntos 8519

Me enfrenté al mismo problema recientemente con WPF ventana acoplable. Resuelto esto mediante el uso de la costumbre ArcMap código de extensión de un Esri Selección Muestra complemento .

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X