В продолжении темы. Попытался отследить момент завершения отрисовки лейблов, чтобы потом запустить другую процедуру.
Код вроде как работает, но странное дело. Событие DisplayFinished срабатывает 6 !!! раз, при этом флаг bFinished
становится в True с первого раза , а цикл c Do While bFinished
= false продолжает крутиться до самого конца, не обращая внимания на переменную.
Где засада? Может как-то по другому написать надо?
Вывод из окна Debug выглядин так:
------------ start-------------
finished True
finished True
finished True
finished True
finished True
finished True
doEvents
------------ stop-------------
Dim pMap As IMap
Dim pMxDoc As IMxDocument
Dim pAV As IActiveView
Private WithEvents pDisplayEvents As ScreenDisplay
Dim bFinished As Boolean
Public Sub foo()
Set pMxDoc = ThisDocument
Set pMap = pMxDoc.FocusMap
Dim pAV As IActiveView
Set pAV = pMap
Set pDisplayEvents = Nothing
Dim pGFLayer As IGeoFeatureLayer
Set pGFLayer = pMap.Layer(0)
bFinished = False
pGFLayer.Visible = True
pGFLayer.DisplayAnnotation = True
'start listening
Set pDisplayEvents = pAV.ScreenDisplay
pAV.Refresh
'start listening
'Set pDisplayEvents = pAV.ScreenDisplay
Do While bFinished = False
'waiting for labeling
DoEvents
Debug.Print "doEvents"
Loop
'stop listening
Set pDisplayEvents = Nothing
'Here I need to call sub ConvertLabeles, but only after labeling finished
Call ConvertLabeles
End Sub
Private Sub ConvertLabeles()
MsgBox "Start Convert"
End Sub
Private Sub pDisplayEvents_DisplayFinished(ByVal Display As IDisplay)
'this event occures more then 1 time
bFinished = True
Debug.Print "finished " & bFinished
End Sub
Private Sub UIButtonControl1_Click()
Debug.Print "------------ start-------------"
Call foo
Debug.Print "------------ stop-------------"
End Sub