Pergunta

Eu tenho uma condição em que eu preciso para fechar o aplicativo e assim eu chamo this.Dispose () quando eu definir um sinalizador certian.

No começo eu pensei que era um problema de chamar funções depois que eu chamo this.Dispose () e então me mudei o código para ser a última coisa que chamou, mas eu ainda obter um "ArgumentException foi não processada" "parâmetro não é válido ". Na Application.Run (new myApp ();. Linha

O que estou fazendo de errado? Eu perdi alguma coisa ao longo do caminho? Ou talvez haja uma melhor maneira de fechar o aplicativo?

Foi útil?

Solução

Tente usar Application.Exit() para sair do aplicativo.

Quando você usa Application.Run(new MyForm());, um loop de mensagem é criado no thread usando o objeto de formulário como a principal forma. Ele tenta entregar mensagens Win32 que estão vindo para o aplicativo para seus respectivos objetos. No entanto, quando você chamar Dispose() sobre o objeto de formulário, você não saiu do loop de mensagem ainda. Quando se tenta entregar a mensagem seguinte ao seu objeto de formulário, ele falhar, uma vez que já está disposto e lança a exceção. Você deve ou solicitar o formulário a ser fechado (chamando Close no formulário), que irá então pedir o formulário para processar o evento e se concluída, sair do loop de mensagem depois. A outra forma (forma mais direta) é para encerrar o ciclo de mensagens no segmento completamente chamando Application.Exit() que fará com que todas as formas conexas de ser fechada.

Outras dicas

Você deve usar this.Close () em vez de this.Dispose () para fechar o formulário principal.

Se você está fechando o aplicativo e assim descarregar o AppDomain você realmente não precisa chamar Dispose () desde que tudo, desde o AppDomain será removido da memória.

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