吾爱破解 - LCG - LSG |安卓破解|病毒分析|www.52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 3400|回复: 6
收起左侧

c#串口事件接受一次数据莫名其妙会触发两次

[复制链接]
pjianjian 发表于 2019-8-17 12:02
30吾爱币
c#串口事件接受一次数据莫名其妙会触发两次,程序使用控件做的很简单的测试程序,软件事件收到一次串口数据都会触发两次事件,而第二次事件串口缓冲区是空,第一次收到的数据是完整的没啥问题,大佬知道是哪里的问题嘛,下面是测试代码
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.IO.Ports;

namespace chuankoueven
{
    public partial class Form1 : Form
    {

      
        public Form1()
        {
            InitializeComponent();
         
            serialPort1.DataReceived += new SerialDataReceivedEventHandler(this.serialPort1_DataReceived);
         
        }

        private void button1_Click(object sender, EventArgs e)
        {
            serialPort1.Parity = System.IO.Ports.Parity.None;
            serialPort1.DataBits = 8;
            serialPort1.BaudRate = 115200;
            serialPort1.StopBits = System.IO.Ports.StopBits.One;
           
            serialPort1.Open();
        }

        private void button2_Click(object sender, EventArgs e)
        {
            serialPort1.Close();
        }

        private void serialPort1_DataReceived(object sender,SerialDataReceivedEventArgs e)
        {
            
         

           byte[] a = new byte[serialPort1.BytesToRead];
           serialPort1.Read(a, 0, serialPort1.BytesToRead);
         
        }
   

最佳答案

查看完整内容

https://stackoverflow.com/questions/30296199/serial-port-objects-datareceived-event-firing-twice

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

smldhz 发表于 2019-8-17 12:02
https://stackoverflow.com/questions/30296199/serial-port-objects-datareceived-event-firing-twice
 楼主| pjianjian 发表于 2019-8-17 15:40
smldhz 发表于 2019-8-17 13:45
https://stackoverflow.com/questions/30296199/serial-port-objects-datareceived-event-firing-twice

大佬你要是知道的话告诉我吧,都是英文看不懂啊
Monitor 发表于 2019-8-17 15:58
smldhz 发表于 2019-8-17 18:35
pjianjian 发表于 2019-8-17 15:40
大佬你要是知道的话告诉我吧,都是英文看不懂啊

原文大概意思是触发两次是正常的 第二次收到的是一个EOF标志,忽略它就好了
[C#] 纯文本查看 复制代码
private void serialPort1_DataReceived(object sender,SerialDataReceivedEventArgs e)
        {
            
          

           byte[] a = new byte[serialPort1.BytesToRead];
           serialPort1.Read(a, 0, serialPort1.BytesToRead);
          
        }
   

改成
[C#] 纯文本查看 复制代码
private void serialPort1_DataReceived(object sender,SerialDataReceivedEventArgs e) {
        if (e.EventType == System.IO.Ports.SerialData.Eof) return;
        byte[] a = new byte[serialPort1.BytesToRead];
        serialPort1.Read(a, 0, serialPort1.BytesToRead);
    }


 楼主| pjianjian 发表于 2019-8-17 22:07
smldhz 发表于 2019-8-17 18:35
原文大概意思是触发两次是正常的 第二次收到的是一个EOF标志,忽略它就好了
[mw_shl_code=csharp,true]p ...

后面我翻译出来了,我也百度了下,对文件才会这样,而且从我调试来看不是这个问题,因为第二次收到的是空  eof也是数据不会是空
 楼主| pjianjian 发表于 2019-8-17 22:09
Monitor 发表于 2019-8-17 15:58
返回的数值多导致的?

不是这个问题没有返回我是单纯的测试接受数据就发了一次数据接收的很完整,但是无故会触发第二次居然没有任何数据,你可以自己实验下
快速回复 收藏帖子 返回列表 搜索

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-4-25 15:50

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表