Открытие нового окна WPF перед WaitForExit () без зависания окна

Я разрабатываю приложение 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.

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


person Erez.S    schedule 24.10.2018    source источник
comment
Какой код вы использовали для открытия нового потока и какую ошибку вы получаете в связи с проблемой STAThread?   -  person Broots Waymb    schedule 24.10.2018


Ответы (1)


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

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