我在VB.net中使用SpeechSynthesizer()
如何判断发言人何时完成所有数据的发言?
我有这段代码:
repetitionCounter = 0
Do
speaker.SpeakAsync(textIntroduction.Text)
repetitionCounter += 1
If repetitionCounter = repeatXNumberOfTimes Then
MsgBox("Done")
Exit Do
End If
Loop
然而,只要Do开始,MsgBox就会立即出现。我认为这是因为它将.SpeakAsync命令加载到内存中,因此,repeatXNumberOfTimes会立即完成。
我可以将代码更改为:
speaker.Speak(textIntroduction.Text)
这现在有效。但是,表单“锁定”,然后我无法与表单进行交互。我已经尝试实现Application.DoEvents(),但表单仍然“锁定”。
如果演讲者在没有锁定表格的情况下完成演讲,我怎样才能收到通知?
另外,如果我想让发言者无限次播放一些文字,我应该如何实现呢?
* 已更新
这是我的代码:
Dim speaker As New SpeechSynthesizer()
Public Event SpeakCompleted As EventHandler(Of SpeakCompletedEventArgs)
Dim handler As EventHandler(Of SpeakCompletedEventArgs)
在Form_Load()中,我添加了以下代码:
AddHandler speaker.SpeakCompleted, handler
应该怎么做?在SpeakCompleted事件被触发时,我在哪里编写要执行的代码?
答案 0 :(得分:2)
您需要查看SpeakCompleted事件:
来自链接:
SpeechSynthesizer在任何SpeakAsync()或SpeakSsmlAsync(String)方法完成时引发SpeakCompleted事件。您可以使用SpeakCompletedEventArgs为SpeakCompleted事件编写处理程序。
您不需要创建事件,事件已经是SpeachSynthesizer的一部分。只需创建一个与事件签名匹配的子例程,并将其添加到事件中,就像这个简单的命令行示例一样。
Imports System.Speech.Synthesis
Module Module1
Dim speaker As New SpeechSynthesizer()
Sub Main()
AddHandler speaker.SpeakCompleted, AddressOf SpeachComplete
speaker.SpeakAsync("This is a test speach to see if the speach complete event raises")
Console.ReadLine()
End Sub
Private Sub SpeachComplete(sender As Object, e As SpeakCompletedEventArgs)
MsgBox("Speach Done")
End Sub
End Module