PowerShell - 带语音输出的多线程

时间:2012-01-26 22:51:12

标签: powershell powershell-v2.0

我的脚本在调用消息框或语音输出时停止。 该脚本正在等待完成任务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")  

1 个答案:

答案 0 :(得分: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。你想要它是同步还是异步?