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