PowerShell - многопоточность с голосовым выводом - PullRequest
1 голос
/ 27 января 2012

Мой сценарий останавливается, когда я вызываю окно сообщения или голосовой вывод. Сценарий ожидает завершения задачи, что является нормальным поведением в 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 Ответ

3 голосов
/ 27 января 2012

Фоновый подход к работе работает для меня:

$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. Вы хотите, чтобы это было синхронно или асинхронно?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...