Me gustaría añadir un indicador de progreso para nuestro ArcGIS Engine aplicación. Como una barra de progreso en la barra de estado para mostrar cuando el MapControl está ocupada recibiendo o el dibujo del mapa. He estado tratando de encontrar recursos en la documentación sobre cómo hacer esto, pero todos los recursos que me parece es que apunta a la MxStatusBar que es sólo en el ArcGIS Desktop. ¿Alguien sabe que eventos que se debe utilizar para crear mi propio indicador de progreso?
Actualización: Es independiente de ArcGIS Engine Aplicación. Construido en VB.Net el uso de formularios windows forms. Hemos creado la gráfica de la animación para nuestro indicador de ocupado. Así que podemos iniciar y detener la animación cuando no hay progreso. Este fue creado utilizando un cuadro de diálogo que se ejecuta en su propio hilo porque el MapControl bloque el nuevo trazado de la forma durante el sorteo de la fase. Hemos probado a conectar el indicador de ocupado a AxMapControl1_OnBeforeScreenDraw y AxMapControl1_OnAfterScreenDraw eventos. Pero estos eventos son lanzados incluso cuando el mapa se actualiza,para.ex. cuando un cuadro de diálogo que se arrastra sobre el mapa.
También hemos tratado de forma manual mediante la IMapControlEvents2 y da el mismo resultado.
Hemos intentado agregar el IDisplayEvent pero sólo activar en el arranque, no cuando nos panorámica y zoom en el mapa. Aquí está el código que he utilizado para la prueba de los hechos:
'Declarations:
Private m_ActiveViewEventsAfterDraw As ESRI.ArcGIS.Carto.IActiveViewEvents_AfterDrawEventHandler
Private m_DisplayEventsDisplayStarted As ESRI.ArcGIS.Display.IDisplayEvents_DisplayStartedEventHandler
Private m_DisplayEventsDisplayFinished As ESRI.ArcGIS.Display.IDisplayEvents_DisplayFinishedEventHandler
Private m_MapControlEventsOnAfterScreenDraw As ESRI.ArcGIS.Controls.IMapControlEvents2_OnAfterScreenDrawEventHandler
Private m_MapControlEventsOnBeforeScreenDraw As ESRI.ArcGIS.Controls.IMapControlEvents2_OnBeforeScreenDrawEventHandler
'Form_Load
Dim mapControl As IMapControl4 = DirectCast(axMapControl1.Object, IMapControl4)
Dim map As IMap = DirectCast(axMapControl1.ActiveView, IMap)
m_ActiveViewEventsAfterDraw = New ESRI.ArcGIS.Carto.IActiveViewEvents_AfterDrawEventHandler(AddressOf OnActiveViewEventsAfterDraw)
AddHandler CType(map, ESRI.ArcGIS.Carto.IActiveViewEvents_Event).AfterDraw, m_ActiveViewEventsAfterDraw
m_DisplayEventsDisplayStarted = New ESRI.ArcGIS.Display.IDisplayEvents_DisplayStartedEventHandler(AddressOf OnDisplayStarted)
AddHandler CType(axMapControl1.ActiveView.ScreenDisplay, ESRI.ArcGIS.Display.IDisplayEvents_Event).DisplayStarted, m_DisplayEventsDisplayStarted
m_DisplayEventsDisplayFinished = New ESRI.ArcGIS.Display.IDisplayEvents_DisplayFinishedEventHandler(AddressOf OnDisplayFinished)
AddHandler CType(axMapControl1.ActiveView.ScreenDisplay, ESRI.ArcGIS.Display.IDisplayEvents_Event).DisplayFinished, m_DisplayEventsDisplayFinished
m_MapControlEventsOnAfterScreenDraw = New ESRI.ArcGIS.Controls.IMapControlEvents2_OnAfterScreenDrawEventHandler(AddressOf OnAfterScreenDraw)
AddHandler CType(axMapControl1.Object, ESRI.ArcGIS.Controls.IMapControlEvents2_Event).OnAfterScreenDraw, m_MapControlEventsOnAfterScreenDraw
m_MapControlEventsOnBeforeScreenDraw = New ESRI.ArcGIS.Controls.IMapControlEvents2_OnBeforeScreenDrawEventHandler(AddressOf OnBeforeScreenDraw)
AddHandler CType(axMapControl1.Object, ESRI.ArcGIS.Controls.IMapControlEvents2_Event).OnBeforeScreenDraw, m_MapControlEventsOnBeforeScreenDraw
'Methods
Private Sub OnAfterScreenDraw(ByVal hDc As Integer)
Console.WriteLine("OnAfterScreenDraw")
End Sub
Private Sub OnBeforeScreenDraw(ByVal hDc As Integer)
Console.WriteLine("OnBeforeScreenDraw")
End Sub
Private Sub OnActiveViewEventsAfterDraw(ByVal Display As ESRI.ArcGIS.Display.IDisplay, ByVal phase As ESRI.ArcGIS.Carto.esriViewDrawPhase)
Console.WriteLine("AfterDraw")
End Sub
Private IntDisplayStarted As Integer
Private Sub OnDisplayStarted(ByVal Display As IDisplay)
IntDisplayStarted = IntDisplayStarted + 1
Console.WriteLine("OnDisplayStarted " & IntDisplayStarted)
End Sub
Private IntDisplayFinished As Integer
Private Sub OnDisplayFinished(ByVal Display As IDisplay)
IntDisplayFinished = IntDisplayFinished + 1
Console.WriteLine("OnDisplayFinished " & IntDisplayFinished)
End Sub
También han intentado utilizar la ILayerStatus por la aplicación de la IStepProgressor de devolución de llamada en el MapServerLayer, pero también fue una decepción, es activa después de que la imagen ha sido traída desde el servidor.
¿Alguien sabe si hay un evento que podemos utilizar que sólo consigue que se desencadena cuando el Mapa es la obtención de datos, su origen de datos?