質問

私のWinformアプリケーションでGMAP.NETマップコントロールを使用しています。開発者のコンピュータが得意ですが、クライアントコンピュータでクラッシュしていますが、すべてのSytemsを更新します。しかし、数分後の地図はクラッシュして、次のNet FrameworkエラーENTER画像の説明

役に立ちましたか?

解決

過去にGMAP.NETコントロールを使用しており、同様の問題になりました。バックグラウンドで大きな脂肪赤十字で判断すると、GMAP.NETコントロールはそのOnPaintメソッドの間にクラッシュしました。スローされるenumeration operation may not executeエラーは通常、繰り返しの間にコレクションを変更することによって発生します。これはフレームワーク内のほとんどのコレクション型が許可されていないものです。

そのOnPaintメソッドでは、GMAP.NETコントロールは、とりわけ、GMapControl.Overlaysコレクションと、GMapOverlay.MarkersGMapOverlay.Routes、およびこれらのオーバーレイのGMapOverlay.Polygonsコレクションを繰り返します。私の場合は、コントロールが塗装をしようとしている間に、私はこれらのコレクションをバックグラウンドスレッドから変更していましたが、これらのコレクションを繰り返しました。これはあなたが今観察しているものと同様の動作をもたらしました。

Gmap.netは、上記のすべてのコレクションに対してObservableCollectionThreadSafe<T>というカスタムコレクションクラスを使用することに気づいた。この名前は、スレッドの安全性、したがって反復中の変更の許容範囲を意味しますが、実装を検討していませんので、これが本当であるかどうかわかりません。私の観察はそれ以外のことを示すように見えましたが、これはかなり前にありました。

当時、私は を起動するGUIスレッドへの上記のコレクションに変更を変更します(ロックする同期オブジェクトが不足しています)。呼び出しは、変更がGUIスレッドでも常に実行される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パッケージを作成した場合は、依存関係が正しく追加されていることを確認してください。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top