Потоки WPF и пользовательский хост Powershell - выполнение команды остановлено, поскольку пользователь прервал команду

У меня есть приложение WPF с пользовательским хостом powershell, который запускает скрипт, который хранится во встроенном ресурсе. После загрузки пользователь нажимает кнопку "Выполнить", и сценарий вызывается, но я вижу следующую ошибку:

Выполнение команды остановлено, потому что пользователь прервал команду

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

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

        var bgWork = new BackgroundWorker();
        bgWork.DoWork += (s,e) => { };
        bgWork.RunWorkerCompleted += (s,a) =>
        {
            var app = (Application.Current as App);

            if (app.ExecuteImmediate && StartCommand.CanExecute(null))
                StartCommand.Execute(null);

        };
        bgWork.RunWorkerAsync();

BackgroundWorker запускает завершенный код в потоке пользовательского интерфейса. Это всего лишь небольшая хитрость, которую я использую довольно часто, и в основном она работает нормально.

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

Как побочная или связанная проблема, у меня также возникают проблемы с обновлением пользовательского интерфейса через привязку данных, когда процессы запущены. Например, у меня есть индикатор состояния в строке состояния, который переключается между IDLE и BUSY, но это, кажется, никогда не изменится, пока не станет слишком поздно. Привязка работает нормально, но мне нужно вызвать старый VB DoEvents().

ура

1 ответ

Решение

Решили это после кофе и нескольких минут отладки.

Это было из-за того, что я не реализовал метод PromptForChoice полностью.

Однако у меня все еще есть проблемы с обновлением привязок.

Другие вопросы по тегам