地図管理GMAP.NETクラッシュ
-
21-12-2019 - |
質問
私のWinformアプリケーションでGMAP.NETマップコントロールを使用しています。開発者のコンピュータが得意ですが、クライアントコンピュータでクラッシュしていますが、すべてのSytemsを更新します。しかし、数分後の地図はクラッシュして、次のNet Frameworkエラー
解決
過去にGMAP.NETコントロールを使用しており、同様の問題になりました。バックグラウンドで大きな脂肪赤十字で判断すると、GMAP.NETコントロールはそのOnPaint
メソッドの間にクラッシュしました。スローされるenumeration operation may not execute
エラーは通常、繰り返しの間にコレクションを変更することによって発生します。これはフレームワーク内のほとんどのコレクション型が許可されていないものです。
そのOnPaint
メソッドでは、GMAP.NETコントロールは、とりわけ、GMapControl.Overlays
コレクションと、GMapOverlay.Markers
、GMapOverlay.Routes
、およびこれらのオーバーレイのGMapOverlay.Polygons
コレクションを繰り返します。私の場合は、コントロールが塗装をしようとしている間に、私はこれらのコレクションをバックグラウンドスレッドから変更していましたが、これらのコレクションを繰り返しました。これはあなたが今観察しているものと同様の動作をもたらしました。
Gmap.netは、上記のすべてのコレクションに対してObservableCollectionThreadSafe<T>
というカスタムコレクションクラスを使用することに気づいた。この名前は、スレッドの安全性、したがって反復中の変更の許容範囲を意味しますが、実装を検討していませんので、これが本当であるかどうかわかりません。私の観察はそれ以外のことを示すように見えましたが、これはかなり前にありました。
当時、私はGMapControl.OnPaint
メソッドと同時に実行できないことを確認します。
あなたがあなたのマシンでこの行動を観察していないのかについて:これはさまざまな理由によるものかもしれません。おそらくあなたはラッキーになった、おそらくあなたはクライアントなどとは異なるアプリケーションを使って使っています
gmap.netディスカッションフォーラムについての質問に対するより親切な回答を得ることができます。 。
他のヒント
ユーザバージョンでは、core.dllは、ユーザーのバージョンがユーザーのバージョンが実行されているもの、またはユーザーのPCにインストールされているPackaged .NETアプリケーションから、特定のWindowsフォームDLLを表示しています。これがそうでない場合は、GMAPフォーラムからヘルプを求めるのが最善かもしれません。
これを修正するには、マーカーやポリゴンの更新または追加の無効化を無効にする必要があります。
MyMap.HoldInvalidation = True
'
' Add markers or polygons now
'
MyMap.HoldInvalidation = False ' Not sure if this line is needed
MyMap.Refresh()
. アプリケーションを実行するために必要なDLLが見つからない、私はあなたのローカルシステムの完全なbinフォルダをコピーしてからアプリケーションを実行しようとすることをお勧めします。MSIパッケージを作成した場合は、依存関係が正しく追加されていることを確認してください。