2013-02-22 66 views
10

我最近在C#中繼承了一個大型項目,該項目使用ArcGIS渲染某些區域平面圖。目前使用它的人不斷抱怨該工具的性能極差,現在我的任務是加快速度。ArcGIS Desktop API - 檢查渲染是否完成

當我第一次看代碼時,我很害怕。在每次打電話給gis api之後,它都充滿了30-60s的睡眠System.Threading.Sleep(30000);,導致簡單的動作需要幾分鐘。

經過一些測試後,很明顯,刪除它們會導致草圖變得不完整或出現工件,原因很簡單,因爲在執行下一個操作之前,場景尚未完全呈現。

我的問題很簡單。有沒有辦法獲得ArcGIS呈現的當前狀態,因此,我可以停止工具,直到ArcGis將當前視圖標記爲就緒,而不是等待「默認」30秒?

謝謝

編輯:示例代碼

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

我可以提供更多的代碼片段,但我認爲這個問題是比較通用的,而不是直接我的代碼有關。

回答

1

我有過的文檔周圍咋一看,發現如下:

  1. IPageLayoutControlEvents
  2. IActiveViewEvents

看起來他們是有用的,特別是 「AfterDraw」 事件。我想你可以聽取相關的事件來根據需要啓用/禁用你的工具。

+0

似乎這些處理程序不會觸發我應用程序中的大多數事件,所以不幸的是這並不會有多大幫助。我會努力+1。可能不得不放棄它。重寫整個工具來處理這些事件花費太多。 – ZorleQ 2013-06-21 14:23:22

+0

可惜這一點,感謝+1雖然。 – 2013-06-24 08:01:02