如何在 PowerShell 完成之前中断和停止 TTS 引擎?

How to interrupt and stop the TTS engine in PowerShell ahead of its completion?

在 PowerShell 5.1.18362.752 中,当我尝试执行以下命令时:

Add-Type -AssemblyName System.Speech; $x = New-Object System.Speech.Synthesis.SpeechSynthesizer; $x.Speak('Hello. This is a sentence.')

我好像不能在它说话的时候用 Ctrl+C 打断它。整个输入被大声读出。有没有办法在它自行完成之前阻止它?我知道我可以关闭 PowerShell 立即停止演讲,但我正在寻找更优雅的东西,特别是因为我的 PS 需要一秒或更多秒才能重新启动 - 对于我的用例,我需要能够中断讲话并迅速开始另一场讲话,而无需用户等待几秒钟。

您应该调用 SpeakAsync() 异步方法,而不是 Speak() 阻塞方法。

然后你可以用SpeakAsyncCancelAll()

轻松停止演讲
Add-Type -AssemblyName System.Speech;
$x = New-Object System.Speech.Synthesis.SpeechSynthesizer;
$x.SpeakAsync('Hello. This is a very very very very long sentence.')
Start-Sleep 1
$x.SpeakAsyncCancelAll()

可以在 microsoft docs 中找到很多有用的信息。