2012-01-26 69 views
1

当我调用消息框或语音输出时,我的脚本停止。 脚本正在等待完成任务PowerShell中的正常行为是什么。PowerShell - 带语音输出的多线程

但是如何在语音输出中不中断地执行这个脚本?

我想不休息,执行此代码:

[System.Windows.Forms.MessageBox]::Show("stop") 
$voice = new-object -com SAPI.SpVoice 
$voice.Speak("Hello Stackoverflow!") 
[System.Windows.Forms.MessageBox]::Show("done") 

赞(不工作):

[System.Windows.Forms.MessageBox]::Show("stop") 
$job = start-job { 
$voice = new-object -com SAPI.SpVoice 
$voice.Speak($text) 
} 
[System.Windows.Forms.MessageBox]::Show("done") 

或类似(同样不工作):

$test = "Hello" 
[System.Windows.Forms.MessageBox]::Show("stop") 
$backPS = [powershell]::create()  
[void] $backPS.AddScript("$voice = new-object -com SAPI.SpVoice 
$voice.Speak($test)") 
[System.Windows.Forms.MessageBox]::Show("done") 

回答

3

的后台工作方式适用于我:

$job = start-job { (new-object -com SAPI.spVoice).Speak("hi") } 

$text需要传递给后台作业或在后台作业脚本块中定义。

$job = start-job { (new-object -com SAPI.spVoice).Speak($args[0]) } -arg "hi" 

其他的阻止码是[System.Windows.Forms.MessageBox]::Show。你希望这是同步还是异步?

+0

感谢您的帮助!我发现我的错误 $ job = start-job {(new-object -com SAPI.spVoice).Speak($ args [0])} -arg $ text 正常工作! – LaPhi 2012-01-27 00:11:30