Потоки WPF и пользовательский хост Powershell - выполнение команды остановлено, поскольку пользователь прервал команду - PullRequest
1 голос
/ 27 ноября 2010

У меня есть приложение 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 Ответ

0 голосов
/ 28 ноября 2010

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

Был erorr, потому что я не реализовал метод PromptForChoice полностью.

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

...