Вопрос

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

Возможно, потому что его называют из фоновой нити? Нужно ли мне сделать дипетчер?

Это было полезно?

Решение

Вы получаете исключение, когда я звоню 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 Собственность является ключом. Без этого поток не завершится, когда вы вызовите выключение.

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top