Por desgracia, parece que el ILayerExtensionDraw.BeforeLayerDraw
y AfterLayerDraw
eventos sólo son despedidos por la función y las capas de red (ver wguidry el post aquí) y necesito el apoyo de trama capas/mapa de los servicios de la imagen, mosaico datsets, etc.
Así, en pocas palabras esto es lo que terminamos haciendo. Gracias @Kirk de nuevo por las ideas!
Creado las siguientes clases:
Timing
: Almacena el nombre de la capa, el sorteo de la fase y el tiempo transcurrido para un evento de dibujo
TimingSequence
: Almacena todos los tiempos en una secuencia de dibujo
TimingSession
: Almacena todas las secuencias de cronometraje en una de temporización de la sesión y gestiona la Stopwatch
.
Una de temporización de la sesión se inicia y se detiene por un botón de alternar. Cuando el momento de la sesión se inicia puedo habilitar IViewManager.VerboseEvents
y desactivarlo cuando el momento final de la sesión.
Yo reset y poner en marcha el Cronómetro en el inicio de una secuencia de dibujo, como se indica por IActiveViewEvents.ViewRefreshed
y una instancia de un nuevo TimingSequence
objeto.
Entonces, como cada capa sorteos para una fase específica, yo escucho IActiveViewEvents.AfterItemDraw
, detener el Cronómetro, compruebe que ITrackCancel.Continue()
devuelve true (false indica el dibujo fue cancelado) y registrar el nombre de la capa, la fase y el tiempo transcurrido en un nuevo Timing
objeto y añadir a la actual TimingSequence
, y restablecer/reiniciar el Cronómetro.
Yo sólo agregar una secuencia de tiempo para el tiempo de la sesión cuando IActiveViewEvents.AfterDraw
de los incendios en la esriViewForeground
fase (el último sorteo de la fase).
Cuando el usuario finaliza la temporización de la sesión alternando el botón de nuevo, me informe de los resultados (lo ideal sería algo más bonito que un feo MessageBox como es ahora). Parece estar funcionando sin problemas, aunque.
Problema: El AfterItemDraw
evento sólo se parece al fuego de las capas en la raíz de la tabla de contenido, no anidados subcapas, así que si quieres mediciones individuales de una capa debe ser trasladado a la raíz de la TDC y no dentro de una capa de grupo. Ver vinculadas pregunta: ArcObjects: AfterItemDraw sólo se desencadena por capas en la raíz de TOC