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