Потоки 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 полностью.
Однако у меня все еще есть проблемы с обновлением привязок.