2013-02-22 10 views
10

最近、ArcGISを使用して領域計画をレンダリングするC#の大きなプロジェクトを継承しました。現在それを使用している人は、ツールのパフォーマンスが極端に悪いことに不満を持ち続けました。ArcGIS Desktop API - レンダリングが完了したかどうかをチェック

コードを最初に見たとき、私は恐怖を感じました。 gis apiを呼び出すたびに30〜60秒で眠って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のおかげで。 –

関連する問題