【问题标题】:ArcGIS Desktop API - check if rendering has finishedArcGIS Desktop API - 检查渲染是否完成
【发布时间】:2013-02-08 03:31:50
【问题描述】:

我最近继承了一个 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);

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

【问题讨论】:

    标签: c# arcgis


    【解决方案1】:

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

    1. IPageLayoutControlEvents
    2. IActiveViewEvents

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

    【讨论】:

    • 似乎这些处理程序不会触发我的应用程序中的大多数事件,所以不幸的是这不会有太大帮助。我会为努力+1。可能不得不让它保持原样。重写整个工具来处理这些事件的工作量太大。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-03-21
    • 1970-01-01
    相关资源
    最近更新 更多