Почему мое приложение WPF не закрывается должным образом после отображения диалогового окна WinForms? - PullRequest
4 голосов
/ 08 сентября 2011

Я использую сторонний диалог входа в WinForms в моем приложении WPF, и по какой-то причине это делает мое приложение WPF некорректно закрывающимся при отладке.

Если я выйду из диалогового окна входа в winforms перед входом в систему, приложение закроется правильно, однако, если я успешно войду в систему и открою окно WPF, выход из окна не завершит работу приложения.

Я поставил точку останова в OnExit методе App, и он никогда не вызывается. Я переписал метод OnClosing моего главного окна, и он вызывается, но даже вызов Application.Current.ShutDown() не завершает работу приложения правильно. Я также попытался установить для ShutdownMode моего приложения значение OnExplicitShutdown и OnMainWindowClose, и ни один из них не выключил его.

Единственный совет, который у меня есть, заключается в следующем: в окне отладки появляется следующее, но я понятия не имею, что он пытается мне сказать.

The thread 'vshost.RunParkingWindow' (0xf74) has exited with code 0 (0x0).
The thread <No Name> (0x1b58) has exited with code 0 (0x0).

Это происходит только при запуске в режиме отладки в Visual Studio. Запуск приложения без отладки корректно закрывает приложение.

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

Редактировать

Диалог входа в WinForms - это не традиционный диалог входа в систему с методом Show() или Close(), это статический класс, который имеет только методы Login() и Logout().

Он используется примерно так:

if (CompanyNamespace.ApplicationName.Login())
{
    var shell = new ShellView();
    var context = new ShellViewModel();
    shell.DataContext = context;
    shell.Show();

    // When the Shell Window gets closed, the debugger doesn't stop
}
else
{
    Application.Current.Shutdown(); // Works fine
}

Ответы [ 2 ]

3 голосов
/ 08 сентября 2011

это звучит глупо, но вы пытались вызвать winformsLoginDialog.Close ();в методе onClosing вашего главного окна?Я подозреваю, что в диалоговом окне входа в winforms еще работает поток, и / или форма могла быть скрыта, а не закрыта.

1 голос
/ 08 сентября 2011

Я полагаю, что режим выключения по умолчанию -

ShutdownMode = ShutdownMode.OnLastWindowClose

Если приложение не закрывается, тогда все еще открыты окна.Проверьте коллекцию Application.Current.Windows в отладчике, чтобы найти некорректное окно.

Так что, на мой взгляд, лучше всего использовать

ShutdownMode = ShutdownMode.OnMainWindowClose;

И затем обязательно установите следующее

Application.Current.MainWindow= MyWindow; // Shell etc.
...