Почему моя программа C # WPF продолжает выполнять строки после Application.Shutdown ()? - PullRequest
6 голосов
/ 16 декабря 2011

Вот фрагмент кода, где я выскакиваю простой диалог ("chooser").В зависимости от ввода пользователя приложение может завершиться.

    DPChooser chooser = new DPChooser(dataProvider);
    if (chooser.ShowDialog() == false)
        Application.Current.Shutdown(0);
    else
        ApplicationContext.Current.InitializeDataProviderAPI(chooser.DataProvider);
    }

    // more code continues here
    // THE PROBLEM:
    //     Even when Shutdown() above is called,
    //     the execution continues proceeding past here!

Я запустил его в отладчике, поэтому я знаю , что , если оценивается какfalse, и я знаю , что вызывается Shutdown ().

Так почему же он не выключается?

Примечание: я думаю, это не многопоточность,Я еще ничего не запускаю в других темах.Даже если бы была задействована многопоточность, я бы не ожидал, что код в этом потоке продолжит выполнение после завершения работы ().

Ответы [ 2 ]

11 голосов
/ 16 декабря 2011

Завершение работы останавливает обработку Dispatcher и закрывает приложение, если речь идет о WPF, но на самом деле не уничтожает текущий поток.

В вашем случае вам нужно запретить выполнение кода, выходящего за пределы этого вызова.,Достаточно простого возврата:

 if (chooser.ShowDialog() == false)
 {
     Application.Current.Shutdown(0);
     return;
 }
 else { //...
2 голосов
/ 16 декабря 2011

Он не завершает ваш процесс мгновенно, это контролируемое отключение.

если хотите (не рекомендуется) убивать мгновенно

Process.GetCurrentProcess().Kill();
...