wince5.0,.net2.0环境下,串口是否可以异步接收数据?

时间:2021-10-25 17:52:39
RT,一个程序,串口接收pc机端每100ms发送过来一包的数据(64字节),wince这段,我在sp_DataReceived函数里,设置将读到的数据都合并入一个字符串变量S,然后在界面上添加Timer控件,这个控件每90ms读取一次S,并对其进行分析,分析后的数据输出到窗体上。
现在发现,Timer控件貌似无法按照规定的interval执行,也就是说,经常好久才能执行一次分析程序。。。。
怀疑是串口接收数据的行为优先级很高,导致Timer控件无法连续正常运行。

请问有什么办法解决么????

6 个解决方案

#1


没人碰到这个问题么?

刚才换了种思路,用两个定时器,timer1和timer2,timer2负责定时用sp.ReadExisting()获取数据存入缓存变量,timer1用于分析。
结果发现,timer1在timer2工作期间根本无法启动。。。。

这究竟啥原因?

#2


该回复于2011-03-11 09:15:44被版主删除

#3


.net不懂
只知道wince的串口不支持overlapped
要通过多线程来模拟

不清楚楼主是不是用的.net里面的SerialPort控件
以前偶尔用过,接收数据之后,用个叫什么异步托管
然后在里面修改界面上显示的参数

ps:确实不是很懂,纯属顶贴。

#4


研究了下,貌似有个System.Threading.Timer对象,不知道能完成任务不?

#5


引用 3 楼 joyzml 的回复:
.net不懂
只知道wince的串口不支持overlapped
要通过多线程来模拟

不清楚楼主是不是用的.net里面的SerialPort控件
以前偶尔用过,接收数据之后,用个叫什么异步托管
然后在里面修改界面上显示的参数

ps:确实不是很懂,纯属顶贴。


对的,就是用这个控件,DataReceived事件里的确可以通过程序托管来实现修改界面参数的显示,但是问题是,设计要求是,串口这里只负责接收,而必须有另一个线程来分析数据并修改显示。。。。头疼,查了下,貌似要用到System.Threading.Timer,但是,测试的时候报错说,无法访问独立线程控件之类的。。。。

#6


完蛋了,System.Threading.Timer也不能满足要求。。。

究竟要怎么样啊?System.Threading.Timer已经是独立线程运行了。。。

#1


没人碰到这个问题么?

刚才换了种思路,用两个定时器,timer1和timer2,timer2负责定时用sp.ReadExisting()获取数据存入缓存变量,timer1用于分析。
结果发现,timer1在timer2工作期间根本无法启动。。。。

这究竟啥原因?

#2


该回复于2011-03-11 09:15:44被版主删除

#3


.net不懂
只知道wince的串口不支持overlapped
要通过多线程来模拟

不清楚楼主是不是用的.net里面的SerialPort控件
以前偶尔用过,接收数据之后,用个叫什么异步托管
然后在里面修改界面上显示的参数

ps:确实不是很懂,纯属顶贴。

#4


研究了下,貌似有个System.Threading.Timer对象,不知道能完成任务不?

#5


引用 3 楼 joyzml 的回复:
.net不懂
只知道wince的串口不支持overlapped
要通过多线程来模拟

不清楚楼主是不是用的.net里面的SerialPort控件
以前偶尔用过,接收数据之后,用个叫什么异步托管
然后在里面修改界面上显示的参数

ps:确实不是很懂,纯属顶贴。


对的,就是用这个控件,DataReceived事件里的确可以通过程序托管来实现修改界面参数的显示,但是问题是,设计要求是,串口这里只负责接收,而必须有另一个线程来分析数据并修改显示。。。。头疼,查了下,貌似要用到System.Threading.Timer,但是,测试的时候报错说,无法访问独立线程控件之类的。。。。

#6


完蛋了,System.Threading.Timer也不能满足要求。。。

究竟要怎么样啊?System.Threading.Timer已经是独立线程运行了。。。