2012-01-26 70 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