vb.net - SAPI SPEAK 如何做一个后台工作人员
问题描述
我想在 Visual Basic .NET 中创建一个讲 SAPI 的后台工作人员,以便让我的客户在收听 SAPI 谈话的同时继续做某事。我已经达到了这一点,但问题是如果我想重现另一个演讲,我无法取消当前演讲并出现异常。
我有以下代码:
'MODULE IMPORTED IN THE MAIN WORK: argsBackgroundWorker.vb
Public Class argsBackgroundWorker
Public text_to_speak As String
End Class
Private talk As argsBackgroundWorker = New argsBackgroundWorker()
Private Sub sapitalk_background_DoWork(sender As Object, e As System.ComponentModel.DoWorkEventArgs) Handles sapitalk_background.DoWork
If (My.Settings.help_voice = True) Then 'PASS TRUE
Dim reproduceText
Dim text As argsBackgroundWorker = e.Argument
'I have put this code to cancel... So? :(
If sapotalk_background.CancellationPending Then Exit Sub
reproduceText = CreateObject("Sapi.spvoice")
reproduceText.speak(talk.text_to_talk)
Else
sapitalk_background.CancelAsync()
End If
End Sub
Private Sub btn_saysomething_Click(sender As Object, e As EventArgs) Handles btn_saysomething.Click
'Support in order to cancel tasks.
sapitalk_background.WorkerSupportsCancellation = True
talk.text_to_speak = "SOMETHING SOOOOOO SOO SOOOOOO LONG..."
'Cancel another text being spoken.
sapitalk_background.CancelAsync()
'Then, talk the new text.
sapitalk_background.RunWorkerAsync(talk)
End Sub
Private Sub principal_Load(sender As Object, e As EventArgs) Handles MyBase.Load
'Support in order to cancel tasks.
sapitalk_background.WorkerSupportsCancellation = True
talk.text_to_speak = "SOMETHING SOOOOOO SOO SOOOOOO LONG..."
'Cancel another text being spoken.
sapitalk_background.CancelAsync()
'Then, talk the new text.
sapitalk_background.RunWorkerAsync(talk)
End Sub
它可以很好地作为背景朗读,但请注意,当我编译应用程序时,它会开始朗读长文本。如果我单击一个按钮来取消当前的讲话并讲另一个文本,它会失败并告诉我它正在运行当前的后台工作人员。
解决方案
我唯一的想法是
While Not sapitalk_background.IsBusy
sapitalk_background.RunWorkerAsync(talk)
End While
如果它卡在这个循环中直到声音停止,那么我认为一旦它在 bg 线程上运行,你就无法停止声音。
推荐阅读
- python - 无法从源 Pylance (reportMissingModuleSource) 解析导入“flask”
- javascript - NodeJS、HTML 表单、端点、req.body 返回未定义
- swift - 替换Occurences后如何在Swift中将文本转换为小数/双精度?
- asp.net-core - .Net Core Identity 外部登录不起作用
- android-gps - 如何在 android GPS 中获得 5 米的精度
- sql-server - 识别每个 ID 存在 2 个列值:SQL
- css - 更改 matsnackbar 的颜色
- java - 转换列表
进入int - java - 验证响应正文中仅包含消息的响应
- sql - 如何使用光标更新组行(逐行)