#c# #.net #wpf
#c# #.net #wpf
Вопрос:
У меня есть метод, который хорошо работает при запуске в консольном приложении, но при запуске этого в WPF при нажатии кнопки он открывает приложение, но не ждет, пока приложение закроется.
private static int OpenApplication(string applicationName) { try { ProcessStartInfo psi = new ProcessStartInfo { FileName = applicationName, WindowStyle = ProcessWindowStyle.Hidden, UseShellExecute = true, }; Process p = Process.Start(psi); if (p != null) { p.WaitForExit(); if (p.ExitCode == 0) { return 0; } } } catch (Win32Exception ex) { MessageBox.Show(ex.Message); } return 1; }
Что я должен сделать, чтобы выполнить функцию, когда пользователь закрывает приложение в WPF? это не ждет, как я пытаюсь в событии нажатия кнопки
private void Button_Click(object sender, RoutedEventArgs e) { var x = OpenApplication("appicationFileName"); if (x == 0) { msg.Content = "Exited"; } else { msg.Content = "Waiting"; } }
Это хорошо работало в консольном приложении.
Комментарии:
1. пробовал с
UseShellExecute = false
?2. Указанный исполняемый файл не является допустимым приложением для данной платформы ОС, появится ошибка, и он не будет работать. Спасибо за этот комментарий
3. Показывает ли он ошибку через MessageBox. Показать() вообще? Вы пробовали установить точку останова на p.WaitForExit(); и пройти через код?
4. Кроме того, на вашем клике по кнопке у вас есть «асинхронный», но у вас нет вызова «ожидание». Может быть, тебе нужно это сделать
var x = await OpenUsersAndGroup("appicationFileName");
. Не уверен, что вы хотели изменить имя, но метод OpenUsersAndGroup (который не отображается, если он отличается) должен иметь такую подпись, какprivate static Tasklt;intgt; OpenUsersAndGroup(string applicationName)
5. То, что я пробовал, но не работал в качестве основного потока, предполагает, что процесс завершен, а не является частью основного потока.