2013-02-22 3 views
10

최근 ArcGIS를 사용하여 일부 영역을 렌더링하는 C#으로 대규모 프로젝트를 상속 받았습니다. 현재이 도구를 사용하는 사람들은 도구의 성능이 매우 떨어지는 것에 대해 불평을 계속했으며 지금은 더 빨리 수행하는 것이 내 작업입니다.ArcGIS Desktop API - 렌더링이 완료되었는지 확인

코드를 처음 보았을 때 나는 두려웠다. 30-60s로 가득 차서 gis api를 호출 할 때마다 간단한 작업으로 인해 분이 소요됩니다. System.Threading.Sleep(30000); 잔다.

약간의 테스트를 거친 후 다음 작업을 수행하기 전에 장면이 완전히 렌더링되지 않았기 때문에이를 제거하면 스케치가 발생하지 않거나 아티팩트로 가득 차게되었습니다.

내 질문에 간단합니다. ArcGIS의 현재 상태를 표시하는 방법이 있습니까? '기본'30을 기다리는 대신 ArcGis가 현재보기에 준비가되었음을 표시 할 때까지 도구를 중지 할 수 있습니까? 내가 더 많은 코드 조각을 제공 할 수

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

샘플 코드,하지만 난 질문을 더 일반적인 생각, 그리고 직접 내 코드 관련 :

편집 감사드립니다.

답변

1

나는 문서 주위에 날카로운 표정을 가지고 다음을 발견했다 : 그들은, 특히 "AfterDraw"이벤트 유용처럼

  1. IPageLayoutControlEvents
  2. IActiveViewEvents

것 같습니다. 관련 행사를 듣고 필요에 따라 도구를 사용/사용 중지 할 수 있다고 생각합니다.

+0

이러한 핸들러가 내 애플리케이션의 대부분 이벤트에서 실행되지 않는 것 같아 불행히도이 방법은별로 도움이되지 않습니다. 노력을 위해 +1하겠습니다. 그것이 그것을 그대로두고해야 할 수도 있습니다. 해당 이벤트를 처리하기 위해 전체 도구를 다시 작성하는 데 너무 많은 노력이 필요합니다. – ZorleQ

+0

+1에 대해 고맙다. –

관련 문제