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 ausenter image description here

War es hilfreich?

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.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top