Я бы посоветовал вам выполнить фоновое задание, используя Start-Job
(самое простое) или Runspace (немного сложно сделать, но эффективно) для вашей задачи, поэтому вам не нужно полагаться на таймер сна, чтобы убедиться, что ваша команда выполнена. , Но это ваша прерогатива.
Тем не менее, вы можете использовать этот изящный маленький трюк, хотя и не идеальный, чтобы противостоять вашей не реагирующей проблеме с формой. Используйте приведенный ниже блок для ввода задержки 10 с.
for ($i = 0; $i -lt 50; $i++)
{
Start-Sleep -Milliseconds 200
[System.Windows.Forms.Application]::DoEvents()
}
РЕДАКТИРОВАТЬ: Включая предложения.
Конечно, вы можете сделать это внутри WinForms. Я делал это раньше. Я только что перешел на Runspaces
позже из соображений эффективности и ресурсов. Но для простых целей Start-Job
- самый простой способ.
$ScriptBlock = {
#super lengthy code enclosed in paranthesis to create a scriptblock
#say takes a large amount of time to complete
}
$myJob = Start-Job -ScriptBlock $ScriptBlock
Do
{
Start-Sleep -Milliseconds 100
[System.Windows.Forms.Application]::DoEvents()
}
While ($myJob.State -ne "Completed")
$myJob | Receive-Job
Теперь вы можете включить непредвиденные расходы на случай неудачи и прочее, но я позволю вам разобраться.