Start-Job我创建了一个 Windows 表单,您可以在其中单击一个按钮来启动大约 15 分钟的备份过程(使用)。我使用它是Start-Job为了在备份过程中保持表单响应(响应式我的意思是你可以移动它,最小化它等等)。但是,我希望表单在工作完成后弹出一个消息框,但我无法获得正确的结果。
首先,我尝试了一个While循环,每 10 秒检查一次作业是否完成:
$BackupButton.Add_Click( {
$BackupJob = Start-Job -ScriptBlock { ... }
$Completed = $false
while (!($Completed)) {
if ($BackupJob.State -ne "Running") {
$Completed = $true
}
Start-Sleep -Seconds 10
}
[System.Windows.Forms.MessageBox]::Show('Successfully completed the backup process.', 'Backup Tool', 'OK', 'Info')
})
Run Code Online (Sandbox Code Playgroud)
这在作业完成后给了我一个消息框,但表单在此过程中没有响应,可能是因为它仍在循环中使用线程的资源While。
然后,我尝试使用Register-ObjectEvent调用消息框来显示作业状态何时更改:
$BackupButton.Add_Click( {
$BackupJob = Start-Job -ScriptBlock { ... }
Register-ObjectEvent $BackupJob StateChanged -Action {
[System.Windows.Forms.MessageBox]::Show('Successfully completed the backup process.', 'Backup Tool', 'OK', 'Info') …Run Code Online (Sandbox Code Playgroud)