首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >DataReceived事件有时不会触发

DataReceived事件有时不会触发
EN

Stack Overflow用户
提问于 2011-10-18 13:45:13
回答 2查看 2.7K关注 0票数 1

我正在与使用SerialPort的设备通信。该装置具有RS-485,另一方面(PC)是RS-232 (虚拟端口).该装置正确工作、发送和接收数据。

问题是,DataReceived事件有时不会被触发。我使用System.Timer向设备发送数据,每10秒发送一次。大多数情况下,它可以正常工作,但是每隔1-10分钟我就没有得到响应,然后,再过2-4次,DataReceived事件最终被触发,我得到了一个数据集群(我以前“要求”的所有内容都在缓冲区中)。

我的问题是:,怎么可能,

我不能在这里提供代码示例,对不起,我的应用程序中没有多线程(只有主线程和带有Timer_Elapsed和DataReceived事件的线程,我认为它们是在单独的线程上引发的),我的DataReceived事件处理得很快,不应该并行引发(10秒足够长,设备响应时间小于1秒)。如果我使用Thread.Sleep,它就在我确信它不会与任何东西交互的地方。

这可能更多的是硬件问题而不是软件问题,因为当我使用其他应用程序测试COM端口时,它也以类似的方式运行(其中一个应用程序是用于测试连接的设备制造商,它看起来不像是用C#编写的)。但我对硬件没那么在行。也许PC或COM端口有问题(它不是内置的,而是外部的)?或者可以是操作系统相关的东西(我的应用程序是运行在Windows 2003下的Windows服务)。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-10-19 08:44:12

原来是硬件问题。

设备之间的连接如下:设备<> RS-485 <> Converter1 <> Converter2 <> RS-232 <> Computer <>虚拟COM

Converter1似乎出现故障,它聚集并保存我的设备发送给它的数据。现在我知道出了什么问题,我可以让有能力的人来处理它:)

谢谢你的帮助。你的回答以迂回的方式引导我去检查到底是什么,什么时候来我的网站。

票数 1
EN

Stack Overflow用户

发布于 2011-10-18 13:54:45

在我看来,当你期待的时候,缓冲器就不会被冲红。

对于接收到的每个字节,都不能保证引发DataReceived事件。使用BytesToRead属性确定缓冲区中要读取的数据数量。

请参阅http://msdn.microsoft.com/en-us/library/system.io.ports.serialport.datareceived.aspx

(顺便说一句,DataReceived事件确实是在次要线程上引发的。)

您是否尝试过调整ReadBufferSizeReceivedBytesThreshold属性?那就是我开始调查的地方。你知道这些信息的大致大小吗?您可能希望将ReceivedBytesThreshold属性设置为您希望从设备接收的最小消息大小。然后,您可能需要一小段时间的忙碌等待,以获得最后几个字节来完成消息。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7808226

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档