我在VB.net中使用VB.net()
当说话人讲完所有的数据后,我怎么才能检测到呢?
我有这样的代码:
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事件时,我在哪里编写要执行的代码?
发布于 2012-07-14 16:17:41
您需要查看SpeakCompleted事件:
来自林克:
SpeechSynthesizer在任何SpeakAsync()或SpeakSsmlAsync(String)方法完成时引发SpeakCompleted事件。可以使用SpeakCompleted为SpeakCompletedEventArgs事件编写处理程序。
不需要创建事件,事件已经是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 Modulehttps://stackoverflow.com/questions/11484997
复制相似问题