用C#开发移动设备上的软件,设备需要从串口接收一段数据,多线程开发,不用timer计时器。
我在用C#开发移动设备上的软件,如果设备需要从串口接收一段数据,但是该数据不知道什么时间会从串口读入,编程的时候应该用什么样的方式编写。最好能实现主线程执行一个读串口的函...
我在用C#开发移动设备上的软件,如果设备需要从串口接收一段数据,但是该数据不知道什么时间会从串口读入,编程的时候应该用什么样的方式编写。最好能实现主线程执行一个读串口的函数,然后,等串口接收到数据后,主线程继续往下执行。但是主线程不可以挂起。因为主线程挂起得话 程序的界面就会卡住,所有主线程上的界面重绘也会挂起的,那样我就不能在串口数据读进来之前 操纵界面上面的控件了。本来是用timer 来编写的。但是,发现用timer 软件耦合度太高,代码可重用性太差。求高手指点。
展开
2个回答
展开全部
直接用线程做一个串口监听就行了,一般串口的读数据是不用timer控件的,也不会写到主线程里面。单独用创建一个线程,自定义一个串口就行了。
追问
串口一直监听着?主线程需要用到串口接收的数据时候怎么办呢?主线程不是也要等着么?
比如说这样
main_thread{
message=get_serialPort();//这个位置 主线程不是要thread.join()了?不然怎么打印出message呢
println message;
}
假设get_serialPort()函数创建了一个接收串口的线程了。
追答
主线程等待干什么?要jion也是读取串口数据的线程jion和主线程没关系啊,打印message可以用代理来完成啊。而且串口读取的线程可以一直进行,只要把串口读取的值保存就可以了。不需要jion
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
可以用单独启动一个线程来读取,好像可以做到触发的方式,不需要循环等待,有数据就读取。具体的自己去研究一下,以前做过类似的,现在差不多都忘了。
更多追问追答
追问
你说的是委托吧。
能不能有一种办法,我主线程里面的程序执行到读串口的位置,程序就等待数据读进来。读完后,程序又接着往下走,但是等串口读入数据的这个时间中,主线程不是被挂起的。
追答
接收串口数据包的方法不是委托,传递数据包的机制才用委托,类似于TcpListener.AcceptTcpClient()这样的方法,有连接请求时执行下一步。
注:当串口有数据时,自动接收数据包,收到数据包时再调用事件(委托定义、声明)将消息传递到处理的地方。
本回答被提问者和网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询