C#串口能接收第一个数据,第二个数据接收不到,第三次也能接收到

该博客讨论了在C#中使用SerialPort进行串口通信时遇到的问题,即只能成功接收第一个数据包和第三个数据包,而第二个数据包无法接收。作者创建了一个名为CrtHelp的类,包含了串口名称、编码类型以及数据接收事件处理。在DataReceived事件处理函数中,尝试读取串口缓冲区的数据并进行转换,但未能解决第二个数据包丢失的问题。
摘要由CSDN通过智能技术生成

using System;
using System.Collections.Generic;
using System.IO.Ports;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace CircuitForms
{
    public delegate void DataParam(byte[] param1, int numb);
   public  class CrtHelp
    {
        public SerialPort sp;
        public delegate void ComReciveData(string data);
        public ComReciveData OnHandel = null;
        public DataParam param;
        static List<string> datas = new List<string>();
        static List<byte[]> byteslist = new List<byte[]>();
        static int number=0;
        public string[] seialName { get; set; }
        public Encoding EncodingType { get; set; } = Encoding.ASCII;

        public CrtHelp()
        {
           

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
C# 中,可以使用构造函数、属性或事件来传递数据。 1. 使用构造函数传递数据第一个窗体中,可以在打开第二个窗体时传递数据,例如: ```csharp // 在第一个窗体中 private void button1_Click(object sender, EventArgs e) { string data = "Hello World"; // 要传递的数据 Form2 form2 = new Form2(data); // 创建第二个窗体并传递数据 form2.Show(); // 显示第二个窗体 } // 在第二个窗体中 public Form2(string data) { InitializeComponent(); label1.Text = data; // 在标签中显示传递的数据 } ``` 2. 使用属性传递数据第一个窗体中,可以设置第二个窗体的属性来传递数据,例如: ```csharp // 在第一个窗体中 private void button1_Click(object sender, EventArgs e) { string data = "Hello World"; // 要传递的数据 Form2 form2 = new Form2(); form2.Data = data; // 设置第二个窗体的属性 form2.Show(); // 显示第二个窗体 } // 在第二个窗体中 public string Data { get; set; } // 定义属性来接收数据 private void Form2_Load(object sender, EventArgs e) { label1.Text = Data; // 在标签中显示传递的数据 } ``` 3. 使用事件传递数据第一个窗体中,可以定义一个事件,并在第二个窗体中订阅该事件来接收数据,例如: ```csharp // 在第一个窗体中 public event EventHandler<MyEventArgs> DataChanged; private void button1_Click(object sender, EventArgs e) { string data = "Hello World"; // 要传递的数据 DataChanged?.Invoke(this, new MyEventArgs(data)); // 触发事件 Form2 form2 = new Form2(); form2.Show(); // 显示第二个窗体 } // 在第二个窗体中 private void Form2_Load(object sender, EventArgs e) { Form1 form1 = (Form1)Application.OpenForms["Form1"]; // 获取第一个窗体的实例 form1.DataChanged += Form1_DataChanged; // 订阅事件 } private void Form1_DataChanged(object sender, MyEventArgs e) { label1.Text = e.Data; // 在标签中显示传递的数据 } public class MyEventArgs : EventArgs { public string Data { get; set; } public MyEventArgs(string data) { Data = data; } } ``` 以上是三种传递数据的方法,具体使用哪种方法取决于实际情况。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值