10

我最近继承了一个 C# 中的大型项目,它使用 ArcGIS 来渲染一些区域平面图。目前使用它的人一直在抱怨该工具的性能极差,我现在的任务是让它更快。

当我第一次看代码时,我很害怕。每次调用 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);

我可以提供更多代码片段,但我认为这个问题更通用,与我的代码没有直接关系。

4

1 回答 1

1

我快速浏览了文档,发现以下内容:

  1. IPageLayoutControlEvents
  2. IActiveView 事件

看起来它们很有用,尤其是“AfterDraw”事件。我想您可以收听相关事件以根据需要启用/禁用您的工具。

于 2013-06-18T13:17:57.363 回答