Pregunta

Título de ello. WPF aplicación con un poco de materia WCF para IPC. Me llamo Application.Current.Shutdown() y la aplicación continúa felizmente. Pensé Shutdown se supone que es imparable.

Tal vez porque está siendo llamado desde un subproceso en segundo plano? ¿Es necesario hacer un poco de tocar el violín despachador?

¿Fue útil?

Solución

Se obtiene una excepción cuando llamo Application.Current.Shutdown en cualquier tema que no sea la principal, por lo que se asumiría en el uso de "despachador de tocar el violín" correctamente ya.

En cualquier caso, esta compila y se cierra una aplicación, por lo que si el bit despachador no se parece a lo que tienes que podría honda en:

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

Otros consejos

En mi experiencia en todos los temas tienen que ser terminada, ya sea explícita o ser marcado como hilos de fondo para que la aplicación se cierre.

Aquí es un ejemplo de dando inicio a un hilo de lectura en el fondo:

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

La propiedad IsBackground es la clave. Sin que se establezca, el hilo no terminará en cuando se llama apagado.

Sólo la experiencia Application.Current.Shutdown no funciona cuando estoy corriendo desde Visual Studio. Dentro de Visual Studio (al menos la versión 2010 que estoy usando) Application.Current.Shutdown no hace nada. Si solo paso a través de él ejecuta esta línea y luego continúa. Si ejecuto el programa (como .exe) desde el Explorador de Windows, entonces Application.Current.Shutdown funciona bien.

Es probable que haya una explicación para esto ya que durante depurar otros hilos están activos, pero no puedo explicarlo.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top