【发布时间】:2016-08-23 11:00:50
【问题描述】:
我在我的应用程序中使用 (SAPI) 对象。但是,每当我执行它的功能时,语音就会运行,但应用程序的性能(其他一切)会暂停,直到语音完成!我想知道这是否与这个说话对象的优先级有关。我可以以某种方式降低它,直到其余代码首先执行? o_O
Private Function Lara(ByVal script As String) As Object
Lara = CreateObject("SAPI.spvoice")
Lara.Voice = Lara.GetVoices.Item(1)
Return Lara.speak(script)
End Function
Private Sub Test_Load(sender As Object, e As EventArgs) Handles MyBase.Load
Logo.Visible = True
Logo.Image = ResizeImage(My.Resources.Spell)
Lara("Welcome")
End Sub
(劳拉)可以在加载表单及其徽标后说“欢迎”吗?
谢谢。
感谢 Lesley Gushurst 女士,语音现在按照代码顺序运行(应用程序出现,它的徽标,然后是语音)。解决方案是向名为“Microsoft Speech Object Library”的项目添加(com-reference),然后将其导入代码中。
Imports SpeechLib
Private Sub Test_Load(sender As Object, e As EventArgs) Handles MyBase.Load
Logo.Visible = True
Logo.Image = My.Resources.Spell
Dim Lara = CreateObject("SAPI.spvoice")
Lara.Voice = Lara.GetVoices.Item(1)
Lara.speak("Welcome", SpeechVoiceSpeakFlags.SVSFlagsAsync) 'It's declared now!
End Sub
【问题讨论】:
-
查看Form.Shown event,但是如果它是一个阻塞调用,您可能希望在另一个线程中运行它。
-
谢谢文森特先生。但我的问题是总体上降低 SAPI 的优先级。因此,SHOWN 事件处理程序不会完成。
-
在代码执行方面没有所谓的“优先级”。它可以是同步、异步或多线程同步/异步。
-
文森特先生,请记住这一点。 ^_^
-
好:)!如果代码是同步执行的,则执行将停留在同一行代码上,直到该行完成执行。
Lara.speak()是一个同步调用,它似乎也会阻塞直到它完成通话,这就是它阻止其余部分执行的原因。
标签: vb.net performance sapi