2012-01-26 20 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 {(新しいオブジェクトのSAPI.spVoice).Speak($ args [0])} -arg $ text はうまくいきます! – LaPhi

関連する問題