У меня есть сценарий, который использует асинхронные пространства выполнения для отображения графического интерфейса XAML/WPF при обработке данных в фоновом режиме. Когда я нажимаю кнопку, он вылетает, но только в определенном состоянии. Позвольте мне уточнить.
Сценарий начинается с проверки связи с длинным списком серверов, чтобы убедиться, что они работают. После этого он выполняет несколько SQL-запросов, вызовов WMI, другой логики, обрабатывает все данные, а затем обновляет мою DataGrid в другом окне по одной строке за раз информацией.
Кнопка просто вызывает подтверждение WinForm:
#$Global:uihash is my synchronized hashtable.
$Global:uihash.Button.add_click({if([System.Windows.Forms.MessageBox]::Show `
("Yes or No?", "Question",[System.Windows.Forms.MessageBoxButtons]::OKCancel) -eq "OK")
{Do stuff back in main PS Window}
Если я нажму кнопку, пока скрипт пингует все устройства, он работает отлично. Если я нажму кнопку в любое другое время во время выполнения сценария, PS Windows сразу перевернется, чтобы не отвечать, и мне придется их убить.
Из журнала событий приложения:
Программа PowerShell_ISE.exe версии 10.0.10586.117 перестала взаимодействовать с Windows и была закрыта.
Я на 95% уверен, что это потому, что пингование устройств - единственная часть скрипта, которая абсолютно не взаимодействует с другим окном, я просто не знаю, как это исправить или даже обойти это.
Мне интересно, видел ли кто-нибудь или испытал это или что-то подобное раньше, и как вы обошли это. Любая помощь будет принята с благодарностью. Спасибо!