C# 串口Close死锁怎么办?

C# 串口Close死锁怎么办?,第1张

备注

调用此方法会关闭 SerialPort 对象并清除接收缓冲区和传输缓冲区。

对于所有应用程序,最佳做法是在调用 Close 方法之后和尝试调用 Open 方法之前等待一会儿,因为端口可能未即时关闭。

他的实现就是这样子的,没办法解决

一般二进制格式数据就是这样分析,分析数据长度是否足够,找到数据头,数据长度,校验,然后分析。

分析方式很多。结合各自实际情况 *** 作,可以使用序列化方式,但是wince不支持,也可以用BitConvert方式将连续的字节读取为某个类型的变量。

 

希望看到这里,能给你带来帮助,欢迎大家和我讨论,希望经验丰富的朋友不吝赐教。上一篇中,有朋友说用BeginInvoke可以避免死锁问题,我暂时没有线,没有测试成功,改天测试后再公布结果。

 

DataReceived事件中,最高效的做法是指缓存数据,然后异步的去分析数据。但是,这样较复杂,在效率要求不是很高的情况下(大多数情况),可以在DataReceived事件中缓存数据后,立刻进行数据完整性检查,有效性检查,分析数据,以及更新界面。但这么做有一个隐患,底层串口 *** 作的效率依赖于数据分析和界面更新,任何一个环节频繁耗时过长,都会造成数据的堆积。文章只假设都不拖时间的情况。

1。程序运行时,也打开任务管理器看下内存的变化情况,一直增大的话肯定是内存泄漏了,这时你要好好检查程序里的new语句,看有没有对应的delete语句。特别是定时器那块要特别注意。。

2。观察程序中的数组,有可能是数组的越界。搜索每个数组 *** 作,进行保护输出。就是 *** 作前判断是否到了数组的界限。

3.跟踪指针,对有指针 *** 作的地方要跟踪下,看下指针是否有越界情况。

这种问题要耐心点,一步步来。。加油!!!


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/8150743.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-13
下一篇 2023-04-13

发表评论

登录后才能评论

评论列表(0条)

保存