Открытие нового окна WPF перед WaitForExit () без застревания окна - PullRequest
0 голосов
/ 24 октября 2018

Я разрабатываю приложение WPF.Сейчас я пытаюсь сделать что-то вроде этого:

          //Print the information about what happened, and open toolbar.
            MessageBox.Show("Cannot find the destination file, The application will now open Google Chrome." + Environment.NewLine
            + "Please fill in the information and when you finish close Google Chrome.");

           //open Attributes Toolbar

            new AttributesToolbar(application.Attributes).Show();

           //start google chrome and wait for the user to close it
            Process.Start(startInfo).WaitForExit();

            var success = (MessageBox.Show("Did you succeed?", "Status check", MessageBoxButton.YesNo, MessageBoxImage.Warning) == MessageBoxResult.Yes);
            return new RPAResult()
            {
                Succeeded = success
            };

Это следующие шаги:

1) После того, как приложение не может найти файл конфигурации, оно печатает сообщение о том, чтопользователь должен сам заполнить некоторые детали (это фоновая история, не так важно).

2) Приложение открывает окно панели инструментов - это окно WPF с некоторыми деталями, которые пользователь должен скопировать и вставить изна страницу Chrome.

3) Приложение открывает Google Chrome и ждет, пока пользователь не закроет его

Проблема в том, что при выполнении команды "WaitForExit ()" все приложение полностьюзавис, даже новое окно WPF, которое только что открылось, и пользователь не может ничего копировать и вставлять.

Я пытался открыть новый поток, но это вызывает проблему STAThread.

Любая помощьпожалуйста

1 Ответ

0 голосов
/ 24 октября 2018

Вы можете попытаться запустить процесс в задаче, а затем продолжить при выходе с окном сообщения.

 Task.Factory.StartNew(() =>
   {
   Process.Start(startInfo).WaitForExit();
   }).ContinueWith(prevTask =>
   {
   var success = (MessageBox.Show("Did you succeed?", "Status check", MessageBoxButton.YesNo, MessageBoxImage.Warning) == MessageBoxResult.Yes);
   [...]
   });
...