Mapa de controlo Gmap.net falha
-
21-12-2019 - |
Pergunta
Eu estou usando gmap.net Mapa de controlo no meu aplicativo winform.é a execução de bons desenvolvedores de computadores, mas falhar em computadores de clientes Apesar de atualização de todos os sistemas.mas depois de alguns minutos, o mapa é falha e dar seguintes net framework erro
Solução
Eu tenho usado o GMap.NET controle no passado, e eu me deparei com um problema semelhante.A julgar pelo grande e gordo da cruz vermelha em fundo, o GMap.NET controle caiu durante a sua OnPaint
o método.O enumeration operation may not execute
erro que é lançada, normalmente, é causado por modificação de uma coleção durante a iteração é:isso é algo que a maioria dos tipos de coleção no quadro não permite.
Em sua OnPaint
método, o GMap.NET controle repete inúmeras coleções, entre outros o GMapControl.Overlays
a recolha e o GMapOverlay.Markers
, GMapOverlay.Routes
e GMapOverlay.Polygons
coleções dessas sobreposições.No meu caso, eu estava modificando essas coleções a partir de um thread em segundo plano enquanto o controle estava tentando fazer a sua pintura, e assim a iteração essas coleções.Isto resultou em um comportamento semelhante ao que você está observando agora.
Eu notei que GMap.NET utiliza uma classe de coleção personalizada chamada ObservableCollectionThreadSafe<T>
para todos da referida coleção.O nome implica a segurança de segmentos e, por isso, possível de tolerância para modificações durante a iteração, mas eu ainda não estudada a sua aplicação, então eu não tenho certeza se isso é verdade.Minhas observações parecia indicar o contrário, mas isso foi há muito tempo atrás.
No momento, eu resolvi meus problemas invocando modificações acima referidas coleções para o thread da GUI (por falta de um objeto de sincronização para bloqueio).Invocando garante que as modificações não pode, possivelmente, ser executados simultaneamente com o GMapControl.OnPaint
o método, que sempre será executado no thread da GUI bem.
Por que você não observar este comportamento em sua máquina:isto pode ser devido a inúmeras razões.Talvez você tem sorte, talvez você esteja usando o aplicativo de forma diferente do que o cliente, etc.
Provavelmente você pode obter mais útil respostas para sua pergunta sobre o GMap.NET fórum de discussão sobre o pelo caminho.
Outras dicas
A versão do usuário, talvez faltando o formulário específico do Windows DLL como - bem como o Core.dll Isso depende do que a versão do usuário está sendo executada do i.e Visual Studio ou do aplicativo .NET embalado que foi instalado no PC do usuário.Se este não for o caso, pode ser melhor procurar ajuda dos fóruns do GMAP.
Para corrigir este problema, tem de desactivar a invalidação enquanto actualizar ou adicionar marcadores ou polígonos:
MyMap.HoldInvalidation = True
'
' Add markers or polygons now
'
MyMap.HoldInvalidation = False ' Not sure if this line is needed
MyMap.Refresh()
Você está faltando a DLL que é necessária para executar o aplicativo, eu sugeriria copiar a pasta BIN completa no sistema local e, em seguida, tente executar o aplicativo.Se você criou o pacote MSI, verifique se a dependência é adicionada corretamente.