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

当我第一次看代码时,我很害怕。每次调用gis api后,它充满了30-60s的 sleep System.Threading.Sleep(30000);,导致简单的操作需要几分钟。

经过一些测试,很明显,删除它们会导致草图不完整或充满伪影,这仅仅是因为在执行下一个 Action 之前尚未完全渲染场景。

我的问题很简单。有没有一种方法可以获取ArcGIS的当前状态,所以我不必等待“默认” 30秒钟,而是只能停止该工具,直到ArcGis将当前 View 标记为就绪为止。

谢谢

编辑:示例代码

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

我可以提供更多的代码片段,但我认为问题更笼统,与我的代码不直接相关。

最佳答案

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

  • IPageLayoutControlEvents
  • IActiveViewEvents

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

    关于c# - ArcGIS Desktop API-检查渲染是否完成,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/15025471/

    10-11 23:55