【发布时间】:2015-05-18 06:12:33
【问题描述】:
我正在使用 Visual C# 2010 windows 窗体应用程序串行端口
对象 在串行端口上接收 十六进制数据 字节。
但是,我意识到我的 DataReceived 事件被触发了两次,即使我已经读取了缓冲区中的所有数据字节并且缓冲区显示要读取的 0 字节。
为什么以及如何发生这种情况?
private void PortData(Object Sender, System.IO.Ports.SerialDataReceivedEventArgs e)
{
this.Invoke(new EventHandler(delegate { DisplayText(); }));
}
Private void DisplayText()
{
int dataLength = serialPort1.BytesToRead;
byte[] data = new byte[dataLength];
serialPort1.Read(data, 0, dataLentgh)
}
我在串行端口上发送 8 个十六进制字节,即 FF FF FB FB FB FF FB,这些字节由读取函数在数据数组中接收。但在这之后 第二次调用 PortData 函数以读取 0 个字节。我不希望它第二次调用。
【问题讨论】:
-
欢迎来到 StackExchange!这对于第一个问题来说非常好——如果您提及您正在使用的实际命名空间和类名,您的问题将更容易回答(因此更有可能吸引答案),并且将来也更容易找到。如果您链接到参考手册并引用您遇到问题的部分,那就更好了。
-
可能有几个原因(也许它在您读取字节之前被触发) - 您可以显示您的代码吗?也许我们可以帮你解决这个问题(因为它真的应该没有问题)
-
private void PortData(Object Sender, System.IO.Ports.SerialDataReceivedEventArgs e) { this.Invoke(new EventHandler(delegate { DisplayText(); })); } Private void DisplayText() { int dataLength = serialPort1.BytesToRead;字节[]数据=新字节[数据长度]; serialPort1.Read(data, 0, dataLentgh) } 我在串行端口上发送 8 个十六进制字节,即 FF FF FB FB FB FF FB,这些字节由读取函数在数据数组中接收。但是在第二次调用此 PortData 函数以读取 0 个字节之后。我不希望它第二次调用。
-
请编辑您的问题并将代码放在那里-评论中绝对不可读-您还检查了汉斯在下面给您的答案吗?
-
在它之上 -
DisplayText似乎不显示文本 - 它似乎从端口读取数据,所以它似乎真的是 misnamed 加上你应该这样做事件本身;)
标签: c# winforms serial-port