Pergunta

O título é sobre isso. Aplicativo WPF com algumas coisas WCF para IPC. Eu chamo Application.Current.Shutdown() E o aplicativo continua alegremente. Eu pensei Shutdown Era para ser imparável.

Talvez porque esteja sendo chamado de um tópico de fundo? Eu preciso fazer algumas brincadeiras despachantes?

Foi útil?

Solução

Você tem uma exceção quando eu ligo Application.Current.Shutdown Em qualquer tópico que não seja o principal, então eu assumiria que você já usava o "Dispatcher Fieddling" já.

De qualquer forma, isso compila e desiste de um aplicativo; portanto, se o bit despachante não se parecer com o que você tem, você poderá jogá -lo:

ThreadStart ts = delegate()
    {
        Dispatcher.BeginInvoke((Action)delegate()
        {
            Application.Current.Shutdown();
        });
     };
 Thread t = new Thread(ts);
 t.Start();

Outras dicas

Na minha experiência, todos os threads precisam ser encerrados explicitamente ou sejam marcados como encadeamentos de fundo para que o aplicativo seja fechado.

Aqui está um exemplo de iniciar um tópico de leitura em segundo plano:

_readThread = new Thread(new ThreadStart(ReadThread));
_readThread.Name = "Receiver";
_readThread.Priority = ThreadPriority.Highest;
_readThread.IsBackground = true;
_readThread.Start();

o IsBackground A propriedade é a chave. Sem isso ser definido, o thread não termina quando você chama o desligamento.

Eu só experimento Application.Current.Shutdown Não estou trabalhando quando estou fugindo do Visual Studio. No Visual Studio (pelo menos a versão de 2010 que estou usando) Application.Current.Shutdown não faz nada. Se eu for um passo único, ele executar esta linha e continuar. Se eu executar o programa (como um .exe) do Windows Explorer, então Application.Current.Shutdown funciona bem.

Provavelmente há uma explicação para isso, pois durante a depuração outros threads estão ativos, mas não posso explicar.

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