Manipulação ObjectDisposedException e exceções semelhantes durante o encerramento do processo?

StackOverflow https://stackoverflow.com/questions/810495

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.

Foi útil?

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ção ObjectDisposed
  • 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
scroll top