我正在与我的 PowerShell 4.0 脚本中的一个问题作斗争。我使用 windows Forms 命名空间构建了一个用户界面,但需要做一些耗时的处理,这就是为什么我采用 aBackgroundWorker
来保持我的 GUI 响应。
开始后,我使用该$Worker.Add_DoWork({})
方法添加事件订阅,但这不起作用。这就是为什么我改用了Register-ObjectEvent
。现在我的DoWork
事件只有在我关闭表单后才会执行,我不明白为什么会这样。我的代码在下面,有人可以帮我解决这个问题吗?
#Create worker object
$Worker = new-object System.ComponentModel.BackgroundWorker;
$Worker.WorkerReportsProgress = $true;
#Handles $Worker.ReportProgress event
$ReportProgress = {$Progressbar.PerformStep()};
#Handles $Worker.DoWork event
$DoWork = { write-host("do work event fired")};
#Add eventhandlers
Register-ObjectEvent -InputObject $Worker -EventName DoWork -Action $DoWork ;
Register-ObjectEvent -InputObject $Worker -EventName ProgressChanged -Action $ReportProgress;
如果我$Worker.RunWorkerAsync()
在脚本中调用该方法,则不会生成任何输出。如果我关闭调用该$Worker.RunWorkerAsync()
方法的表单,则会将文本“Do work event failed”输出到 PowerShell 控制台。