Приложение.Текущий.Shutdown () не

название Об этом. Приложение WPF с некоторыми материалами WCF для IPC. Я зову Application.Current.Shutdown() и приложение продолжает счастливо. Я думал Shutdown должен был остановить.

возможно, потому, что он вызывается из фонового потока? Мне нужно что-то делать с диспетчером?

3 ответов


вы получаете исключение, когда я звоню Application.Current.Shutdown в любом потоке, кроме основного, поэтому я бы предположил, что вы уже правильно используете "диспетчер".

в любом случае, это компилирует и выходит из приложения, поэтому, если бит диспетчера не похож на то, что у вас есть, вы можете бросить его:

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

по моему опыту, все потоки должны быть либо завершены явно, либо отмечены как фоновые потоки, чтобы приложение закрылось.

вот пример запуска потока чтения в фоновом режиме:

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

на IsBackground свойство является ключом. Без этой настройки поток не завершится при вызове Shutdown.


Я только опыт Application.Current.Shutdown не работает, когда я бегу из Visual Studio. В Visual Studio (по крайней мере, версия 2010, которую я использую) Application.Current.Shutdown ничего не делает. Если я один шаг через него выполняет эту строку,а затем продолжает. Если я запускаю программу (как .exe) из Проводника Windows, то Application.Current.Shutdown работает нормально.

вероятно, есть объяснение этому, так как во время отладки активны другие потоки, но я не могу это объяснить.