Como impedir que o ObjectDisposedException em C # quando o desenho e sai da aplicação

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

  •  01-07-2019
  •  | 
  •  

Pergunta

Eu sou um estudante CompSci, e relativamente novo em C #, e eu estava fazendo um programa "Josephus problema" para uma classe, e eu criei um botão Sair que chama Application.Exit () para sair a qualquer momento, mas se C # ainda está trabalhando na pintura e o botão é pressionado ele lança uma ObjectDisposedExeception para o objeto Graphics. Existe alguma maneira de impedir que isso ?. Eu estava pensando em try {} catch ou alterar um boolean para contar o processo de pintura à parada antes de sair, mas eu quero saber se há outra solução.

Foi útil?

Solução

Não deve ser possível para que isso aconteça. Se o botão for criado no mesmo segmento como a janela, eles compartilham uma bomba de mensagem e o manipulador de pintura não pode ser interrompido para lidar com o botão de saída. A mensagem que o botão foi clicado serão enfileirados na fila de mensagens do segmento até que os manipuladores de pintura retornos.

Geralmente, você deve adiar a pintura para o manipulador de Paint (ou OnPaint override) e em qualquer outro lugar que você precisa para atualizar a tela, chamar o método Invalidate do controle. Que informa ao Windows que uma área precisa de pintura e, uma vez que todas as outras mensagens foram tratados, ele irá gerar uma mensagem WM_PAINT que finalmente vai chamar OnPaint, que por sua vez irá acionar o evento Paint.

Se animação, use um System.Windows.Forms.Timer para acionar cada quadro, em vez de usar um fio. callbacks System.Threading.Timer executados no pool de threads, para que estejam sempre no fio errado para manipular a interface do usuário.

Outras dicas

Você deve ser chamado o método Close () do formulário que contém o botão, a fim de fechar a forma de uma forma ordenada. Fechando a principal forma fará com que o aplicativo para sair para você de qualquer maneira.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top