MapPoint 2009 Prestazioni di caricamento
-
09-06-2019 - |
Domanda
Sto riscontrando alcuni problemi nell'integrazione di MS MapPoint 2009 nella mia applicazione WinForms .Net 2.0 in C#.Ho aggiunto il controllo ActiveX MapPoint a un modulo e non ho problemi a visualizzarne mappe e posizioni;la mia preoccupazione è il tempo necessario per caricare una mappa una volta creata.
I test sulla mia macchina di sviluppo hanno dimostrato che il tempo medio di caricamento è compreso tra 3 e 5 secondi, durante i quali l'applicazione è completamente bloccata.Anche se questo non è del tutto inaccettabile, è un tempo terribilmente lungo per perdere il controllo dell'applicazione.Inoltre, poiché il thread della GUI è bloccato, non posso mostrare una finestra di dialogo di caricamento o qualcosa per mascherare il tempo di caricamento.
La riga che si blocca è questa:(dove axMappointControl1 è il controllo MapPoint)
axMappointControl1.NewMap(MapPoint.GeoMapRegion.geoMapNorthAmerica);
Ho provato a eseguire il metodo NewMap su un altro thread ma il thread della GUI risulta ancora bloccato.
Le mie domande sono:
- Cosa posso fare per velocizzare MapPoint durante il caricamento?
- Esiste un modo per caricare MapPoint in modo che non blocchi il thread della GUI?
Qualsiasi aiuto è molto apprezzato.
Soluzione
Secondo questi discussioni su mapforums.com la lentezza dell'avvio di ActiveX è ben nota e inevitabile (sebbene la questione del threading per aiutare con la reattività della GUI sia ancora aperta.
Una cosa suggerita era invece quella di abbandonare la versione ActiveX a favore dell'oggetto MapPoint.Application.
Spero che aiuti.
Altri suggerimenti
Sì, la versione dell'applicazione funziona su un proprio thread, quindi questa dovrebbe essere un'alternativa più rapida e più semplice eseguire le proprie operazioni durante l'avvio.Tuttavia, MapPoint 2010 tende a impiegare alcuni secondi per l'avvio quando viene avviato da un utente.
Vorrei creare un thread GUI temporaneo e utilizzarlo per visualizzare una schermata iniziale durante l'avvio e/o eseguire qualsiasi inizializzazione thread-safe necessaria.
Tutte le chiamate a un'istanza di MapPoint (o a un controllo ActiveX) devono provenire dallo stesso thread che crea il controllo MapPoint o l'oggetto applicazione.