【发布时间】:2014-02-12 20:07:42
【问题描述】:
我正在使用 Windows 窗体在 c# 中开发具有语音识别功能的应用程序。我的系统在 Windows 窗体应用程序中嵌入了 3D 动画视觉界面。可视组件是一个 COM 组件 (ActiveX)。可视化组件使用文本转语音 (TTS) 引擎,但要访问 TTS,我使用的是组件的 API。我没有通过使用 SAPI 直接使用 TTS。可视化组件使用的 TTS 引擎是 Windows 上可用的默认 TTS。这个可视化组件有一个重要的限制,它不能在多核上工作。因此,当我启动应用程序时,我将 CPU 亲和性设置为 1 个核心。因为一切都采用相同的形式,所以应用程序的所有部分(即图形渲染、TTS、语音识别等)都使用 1 个内核运行。
这个组件不断地在屏幕上渲染一些图形,这是一个密集的过程,它永远不会停止。此外,进程内语音识别器正在运行。当 TTS 处于活动状态时,如果用户与系统交谈,应用程序会冻结几秒钟,然后恢复正常。我想解决这个问题。我尝试将windows窗体的进程设置为更高的优先级,例如实时、高,但没有成功。
我想在与 winform 主线程不同的不间断线程中运行语音识别器或 COM 组件。任何建议,类似的样本可能会有所帮助。
【问题讨论】:
-
尝试使用BackgroundWorker。
-
这个问题对于 Stack Overflow 来说太宽泛了,它是针对有明确答案的编码的具体问题,但它可能适合 programmers.stackexchange.com,它用于讨论高级设计概念和最佳实践。请阅读this meta post了解更多信息。
标签: c# multithreading winforms speech-recognition text-to-speech