问题描述
现在我有一个需求:主界面中有一个按钮button,点击该按钮,开始朗读主界面从串口获取到的数据,当串口中的某一个标志位发生变化(比如说,飞机目前空速异常,高度异常或者其他状态异常),则播报的常规内容马上停止,并开始玄幻播报异常的警告内容,直到警告解除.同时飞机也有一些状态的改变,比如说开伞起飞降落等状态,当从串口中得到这些状态的时候,这时候主界面打断当前播报的常规内容,播报事件状态(一次)对于常规播报内容警告播报内容事件播报内容,分别开启一个线程,这三个线程的作用仅仅是播报在主界面的开始播报的按钮添加一个Click事件,点击之后,会开启一个线程,这个线程用于判断标志位的变化,根据标志位的变化决定开启3个播报线程中的某一个(相当于用这个线程来对上述3个播报线程的调度),这个调度主要是3个线程的播报以及暂停语音播报,采用的微软自带的SpeechSynthesis的程序集进行开发我这种想法不知道,是不是正确?因为,我在编写代码的过程中,感觉控制非常复杂,以及根据状态的变化来决定某一个线程的恢复和暂停这个问题,困扰我快1周多了,一直没有得到解决
解决方案
解决方案二:
你不要把所有的事情都放到线程上去整,你用线程无非就是while(true),线程一般用在长时间执行的方法上,你这里的播报停止,与开始只是是瞬间完成的一个状态开关而已,还不如用一个计时器Timer来处理这样你也好控制,
解决方案三:
能用一个线程来做的事情,不要用3个线程来做你线程要做的工作无非就是朗读文字,3个线程其实完全一样的功能,只不过朗读的文字不一样罢了最简单的办法,反正它也是一个字一个字读,根本不认识什么词组.你做个循环,每次读一个字,这样状态变化了就可以随时停下来,跳出循环,然后重新执行方法,传入新的字符串
时间: 2024-09-30 00:31:28