Приложение.Текущий.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
работает нормально.
вероятно, есть объяснение этому, так как во время отладки активны другие потоки, но я не могу это объяснить.