2013-02-22 15 views
10

Tôi vừa mới kế thừa một dự án lớn trong C#, sử dụng ArcGIS để hiển thị một số kế hoạch vùng. Mọi người hiện đang sử dụng nó tiếp tục phàn nàn về một hiệu suất cực kỳ kém của công cụ và bây giờ là nhiệm vụ của tôi để làm cho nó nhanh hơn.ArcGIS Desktop API - hãy kiểm tra xem kết xuất có hoàn thành

Khi tôi xem mã lần đầu tiên, tôi đã rất sợ hãi. Nó chứa đầy 30-60s ngủ System.Threading.Sleep(30000); sau mỗi cuộc gọi đến gis api gây ra các hành động đơn giản để mất vài phút. Sau một chút thử nghiệm, rõ ràng là việc loại bỏ chúng khiến cho các bản phác thảo không bị ảnh hưởng hoặc đầy đủ các hiện vật, đơn giản chỉ vì cảnh chưa được hiển thị đầy đủ trước khi thực hiện các hành động tiếp theo.

Câu hỏi của tôi rất đơn giản. Có cách nào để có được trạng thái hiện tại của ArcGIS được hiển thị hay không, vì vậy thay vì chờ 30 giây mặc định, tôi chỉ có thể dừng công cụ cho đến khi ArcGis gắn cờ chế độ xem hiện tại là sẵn sàng?

Cảm ơn bạn

Edit: Mẫu Mã

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

tôi có thể cung cấp thêm các đoạn mã, nhưng tôi nghĩ rằng câu hỏi là chung chung hơn, và không trực tiếp mã của tôi có liên quan.

Trả lời

1

Tôi đã có một cái nhìn nhanh xung quanh tài liệu và thấy như sau:

  1. IPageLayoutControlEvents
  2. IActiveViewEvents

Dường như họ có ích, đặc biệt là "AfterDraw" sự kiện. Tôi tưởng tượng bạn có thể nghe các sự kiện liên quan để bật/tắt công cụ của bạn khi cần.

+0

Có vẻ như những người xử lý không kích hoạt phần lớn các sự kiện trong ứng dụng của tôi, vì vậy thật không may điều này sẽ không giúp được gì nhiều. Tôi sẽ +1 cho nỗ lực. Có thể phải để nó như vậy. Quá nhiều nỗ lực để viết lại toàn bộ công cụ để xử lý những sự kiện đó. – ZorleQ

+0

Tiếc về điều đó, cảm ơn cho +1 mặc dù. –

Các vấn đề liên quan