首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SpeechSynthesizer.SpeakAsyncCancelAll()不取消

SpeechSynthesizer.SpeakAsyncCancelAll()不取消
EN

Stack Overflow用户
提问于 2014-09-10 15:04:17
回答 2查看 1.5K关注 0票数 1

我的表单上有一个按钮,标签是“对话”,当用户单击它时,synth.SpeakAsync(Textbox.text)会被触发,该按钮将其文本更改为“停止说话”。

但是,当用户单击“停止说话”,从而触发synth.speakAsyncCancelAll()时,它不会取消“中途发言”。

这是我的代码:

代码语言:javascript
复制
Private Sub btnSpeak_Click(sender As System.Object, e As System.EventArgs) Handles btnSpeak.Click
    If RTextBox.Text = "" Then Exit Sub

    Dim synth As New SpeechSynthesizer
    synth.Rate = -2

    If btnSpeak.Text = "Stop Speaking" Then
        btnSpeak.Text = "Speak"
        synth.SpeakAsyncCancelAll()

    ElseIf btnSpeak.Text = "Speak" Then
        btnSpeak.Text = "Stop Speaking"
        synth.SpeakAsync(RTextBox.Text)
    End If
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-09-12 15:02:26

每次单击该按钮时,都会创建一个新的语音合成器。将昏暗的合成器作为新的语音合成器从按钮单击事件。这样,每次都会引用相同的合成器,然后就会触发语音取消事件。

票数 1
EN

Stack Overflow用户

发布于 2014-09-11 15:35:12

SpeakAsyncCancelAll()将在被调用后引发SpeakCompleted事件,您可以使用以下代码侦听它:

代码语言:javascript
复制
Imports System.Speech.Synthesis

Public Class Form1

    Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
        Dim synthesizer As New SpeechSynthesizer()
        AddHandler synthesizer.SpeakCompleted, AddressOf speakCompleted
    End Sub

    Private Sub speakCompleted(ByVal sender As Object, ByVal e As SpeakCompletedEventArgs)
        Dim cancelled = e.Cancelled
    End Sub
End Class
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25768879

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档