SpeechSynthesizer.SpeakAsyncCancelAll() не отменяет

У меня на форме есть кнопка с надписью "Говорить", когда пользователь нажимает на нее synth.SpeakAsync(Textbox.text) срабатывает, и кнопка меняет свой текст на "Прекратить говорить".

Тем не менее, когда пользователь нажимает на кнопку перестать говорить, тем самым запускает synth.speakAsyncCancelAll() это не отменяет речь в середине текста.

ЗДЕСЬ МОЙ КОД:

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

2 ответа

Решение

Каждый раз, когда вы нажимаете кнопку, создается новый синтезатор речи. Возьмите дим-синтезатор как новый синтезатор речи из события нажатия кнопки. таким образом он будет обращаться к одному и тому же синтезатору каждый раз, а затем должен запустить событие отмены речи

SpeakAsyncCancelAll() вызовет событие SpeakCompleted после вызова, вы можете прослушать его, используя следующий код:

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
Другие вопросы по тегам