Manipulação ObjectDisposedException e exceções semelhantes durante o encerramento do processo?
-
03-07-2019 - |
Pergunta
Meu aplicativo geralmente executado em 10-20 fios e estes tópicos envio de eventos para o GUI para a atualização certos controles quase todos os segundos.
Quando o usuário fechar o meio de aplicação destes, todas as atualizações relacionadas com esses eventos provoca várias falhas aleatórias. Principalmente ObjectDisposedException
e NullReferenceException
.
Uma vez que os eventos já jogado, mas não tratada ainda pelo .NET Framework, eles não estão em um estado onde posso cancelá-las.
Eu não estou muito certo sobre a melhor maneira de lidar com isso. Atualmente eu estou apenas engolir exceções das exceções.
Solução
Algumas opções:
- quando o aplicativo começa a fechar (
FormClosing
?), Você pode começar de forma limpa sair os fios (através de um algum lugar flag) - presumivelmente para falar com sua interface do usuário, você está aumentando eventos que são manipulados pelo UI (que lida com a sincronização etc) - mantenha uma bandeira, e (se é seguro fazer fazer) simplesmente descartar eventos se o sinalizador foi definido (novamente, porque você está saindo)
- quando sair, têm o unsubscribe UI de eventos
Outras dicas
Além , aqui está mais algumas coisas:
- A partir de qualquer ponto, você pode verificar
Environment.HasShutdownStarted
antes de fazer qualquer coisa que possa causar uma exceçãoObjectDisposed
- Se você estiver acessando quaisquer formas janelas, você pode verificar
.IsDisposed
(todos os formulários e controles tiver)
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow