Die Kartensteuerung Gmap.net stürzt ab
-
21-12-2019 - |
Frage
Ich verwende die Kartensteuerung von gmap.net in meiner Winform-Anwendung.Es läuft gut auf Entwicklercomputern, stürzt jedoch auf Clientcomputern ab. Obwohl wir alle Systeme aktualisieren.Aber nach ein paar Minuten stürzt die Karte ab und gibt den folgenden Netz-Framework-Fehler aus
Lösung
Ich habe in der Vergangenheit das GMap.NET-Steuerelement verwendet und bin auf ein ähnliches Problem gestoßen.Dem großen dicken roten Kreuz im Hintergrund nach zu urteilen, ist das GMap.NET-Steuerelement während des Vorgangs abgestürzt OnPaint
Methode.Der enumeration operation may not execute
Der ausgelöste Fehler wird normalerweise dadurch verursacht, dass eine Sammlung während der Iteration geändert wird:Dies ist etwas, was die meisten Sammlungstypen im Framework nicht zulassen.
In seinem OnPaint
Methode iteriert das GMap.NET-Steuerelement zahlreiche Sammlungen, unter anderem die GMapControl.Overlays
Sammlung und die GMapOverlay.Markers
, GMapOverlay.Routes
Und GMapOverlay.Polygons
Sammlungen dieser Overlays.In meinem Fall habe ich diese Sammlungen in einem Hintergrundthread geändert, während das Steuerelement versuchte, es zu malen, und so diese Sammlungen iteriert.Dies führte zu einem Verhalten, das dem ähnelt, was Sie jetzt beobachten.
Mir ist aufgefallen, dass GMap.NET eine benutzerdefinierte Sammlungsklasse namens verwendet ObservableCollectionThreadSafe<T>
für die gesamte oben genannte Sammlung.Der Name impliziert Thread-Sicherheit und damit mögliche Toleranz für Änderungen während der Iteration, aber ich habe die Implementierung nicht untersucht und bin mir daher nicht sicher, ob dies wahr ist.Meine Beobachtungen schienen etwas anderes zu deuten, aber das ist schon eine ganze Weile her.
Damals löste ich meine Probleme durch beschwörend Änderungen an den oben genannten Sammlungen am GUI-Thread (aufgrund des Fehlens eines Synchronisierungsobjekts zum Sperren).Durch den Aufruf wird sichergestellt, dass die Änderungen möglicherweise nicht gleichzeitig mit dem ausgeführt werden GMapControl.OnPaint
Methode, die immer auch im GUI-Thread ausgeführt wird.
Warum Sie dieses Verhalten auf Ihrem Computer nicht beobachten:Dies kann zahlreiche Gründe haben.Vielleicht hatten Sie Glück, vielleicht verwenden Sie die Anwendung anders als den Client usw.
Weitere hilfreiche Antworten auf Ihre Frage finden Sie wahrscheinlich unter GMap.NET-Diskussionsforum Übrigens.
Andere Tipps
Die Benutzerversion fehlt möglicherweise das spezielle Windows-Formular-DLL als--------Henk-als Core.dll. Dies hängt davon ab, was die Benutzerversion von i.E Visual Studio oder Packaged .NET-Anwendung ausgeführt hat, die auf dem PC des Benutzers installiert wurde.Wenn dies nicht der Fall ist, ist es am besten, Hilfe aus den GMAP-Foren zu suchen.
Um dies zu beheben, müssen Sie die Invalidierung während der Aktualisierung oder Hinzufügen von Markern oder Polygonen deaktivieren:
generasacodicetagpre.Sie fehlen die DLL, die zur Ausführung der Anwendung erforderlich ist. Ich würde vorschlagen, den vollständigen Bin-Ordner auf Ihrem lokalen System zu kopieren, und versuchen Sie, die Anwendung auszuführen.Wenn Sie MSI-Paket erstellt haben, stellen Sie sicher, dass die Abhängigkeit ordnungsgemäß hinzugefügt wird.