2013-02-22 18 views
10

Ho recentemente ereditato un grande progetto in C#, che utilizza ArcGIS per il rendering di alcuni piani di area. Le persone che attualmente lo utilizzano continuano a lamentarsi di prestazioni estremamente scadenti dello strumento ed è mio compito ora renderlo più veloce.API ArcGIS Desktop: verificare se il rendering è terminato

Quando ho visto il codice per la prima volta, ero terrorizzato. Era pieno di 30-60s dorme System.Threading.Sleep(30000); dopo ogni chiamata a gis api, causando semplici azioni per richiedere minuti.

Dopo un po 'di test, è diventato chiaro che rimuoverli ha causato gli schizzi incompiuti o pieni di artefatti, semplicemente perché la scena non è stata completamente renderizzata prima di eseguire le azioni successive.

La mia domanda è semplice. C'è un modo per ottenere lo stato corrente di ArcGIS renderizzato, quindi, invece di aspettare gli '30' predefiniti, posso fermare lo strumento solo fino a quando ArcGis contrassegna la vista corrente come pronta?

Grazie

Edit: Codice di esempio

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

posso fornire più frammenti di codice, ma penso che la questione è più generico, e non direttamente il mio-codice relativo.

risposta

1

Ho avuto un rapido sguardo intorno la documentazione e hanno trovato la seguente:

  1. IPageLayoutControlEvents
  2. IActiveViewEvents

Sembra che essi siano utili, in particolare gli eventi "AfterDraw". Immagino che potresti ascoltare gli eventi rilevanti per abilitare/disabilitare il tuo strumento, se necessario.

+0

Sembra che questi gestori non attivino la maggior parte degli eventi nella mia applicazione, quindi purtroppo non sarà di grande aiuto. Farò +1 per lo sforzo. Potrebbe lasciarlo così com'è. Troppo sforzo per riscrivere l'intero strumento per gestire tali eventi. – ZorleQ

+0

Peccato per questo, grazie per il +1 però. –