【发布时间】:2014-01-29 14:10:48
【问题描述】:
我正在解决我的 PowerShell 4.0 脚本中的问题。我使用 windows Forms 命名空间构建了一个用户界面,但需要进行一些耗时的处理,这就是我采用BackgroundWorker 以保持我的 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 已触发”将输出到 PowerShell 控制台。
【问题讨论】:
标签: powershell backgroundworker powershell-4.0