2013-02-22 8 views
10

Niedawno odziedziczyłem duży projekt w języku C#, który wykorzystuje ArcGIS do renderowania niektórych planów powierzchni. Osoby używające go nadal skarżyły się na wyjątkowo słabą wydajność narzędzia i moim zadaniem jest teraz przyspieszyć jego działanie.Interfejs API ArcGIS Desktop - sprawdź, czy renderowanie zostało zakończone.

Kiedy po raz pierwszy spojrzałem na kod, byłem przerażony. To było pełne 30-60 snu System.Threading.Sleep(30000); po każdym wywołaniu gis api, co powodowało, że proste czynności wymagały minut.

Po kilku testach okazało się, że usunięcie ich spowodowało, że szkice są niekompletne lub pełne artefaktów, ponieważ scena nie została w pełni wyrenderowana przed wykonaniem następnych czynności.

Moje pytanie jest proste. Czy istnieje sposób na wyrenderowanie bieżącego stanu usługi ArcGIS, więc zamiast czekać na "domyślne" 30s, mogę zatrzymać narzędzie tylko do momentu, gdy ArcGis uzna bieżący widok za gotowy?

Dziękuję

Edit: Przykładowy kod

doc.ActiveView = (IActiveView)doc.PageLayout; 
doc.ActiveView.ContentsChanged(); 
System.Threading.Thread.Sleep(5000); 
doc.PageLayout.ZoomToWhole();  
System.Threading.Thread.Sleep(30000); 

mogę dostarczyć więcej fragmentów kodu, ale myślę, że pytanie jest bardziej uniwersalne, a nie bezpośrednio związane z moim kodu.

Odpowiedz

1

miałem okiem wokół dokumentacji i stwierdził, co następuje:

  1. IPageLayoutControlEvents
  2. IActiveViewEvents

Wygląda na to, że będzie użyteczny, szczególnie wydarzenia "AfterDraw". Wyobrażam sobie, że możesz słuchać odpowiednich wydarzeń, aby włączyć/wyłączyć swoje narzędzie w razie potrzeby.

+0

Wygląda na to, że te osoby obsługujące nie uruchamiają większości zdarzeń w moim zgłoszeniu, więc niestety to niewiele pomoże. Będę dawać +1 za wysiłek. Może zostawić to tak, jak jest. Zbyt dużo wysiłku, aby przepisać całe narzędzie, aby obsłużyć te zdarzenia. – ZorleQ

+0

Szkoda, że ​​dzięki za +1. –

Powiązane problemy