当前位置:编程学习 > C#/ASP.NET >>

VS2005串口通讯问题

我用VS2005 的serialPort1做了一个串口通讯实验,想把串口读取的数据放入一个变量,每次读取的数据都累加到这个变量后面,等一次通讯的所有帧都接收完整後在进行处理,但现在问题是,我定义了一个静态String变量来存放和+=接收到的数据,但程序运行结果不是我所想要的。
现在我的代码如下,大侠给格解答谢谢。。。

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;

namespace EventTest
{
 

    public partial class Form1 : Form
    {

        public string strTempxinxi = "4343";

        public Form1()
        {
            InitializeComponent();
            comEven.ComEvent +=new ReadComMessage(edisp.ComDispose);

        }

        private void serialPort1_DataReceived(object sender, System.IO.Ports.SerialDataReceivedEventArgs e)
        {
            //读取串口信息
            this.comEven.ReadMessage(this, this.serialPort1.ReadExisting());


            //puts put = new puts(puts1);
     
            //this.Invoke(put, this.serialPort1.ReadExisting());
        }

        #region 5,事件处理
        ComEventClass comEven = new ComEventClass();
        EventDisposeClass edisp = new EventDisposeClass();

        //将读取的信息放入textBox控件
        public void PutInTextBox(string str)
        {
            puts put = new puts(puts1);
            //this.textBox1.Invoke(put, str);

            this.Invoke(put, str);
        }

        private delegate void puts(string str);
        private void puts1(string str)
        {
            //strTempxinxi += str;
            this.textBox1.Text = str;
        }
        #endregion

        private void Form1_Load(object sender, EventArgs e)
        {
            if (this.serialPort1.IsOpen)
            {
                this.serialPort1.Close();
                this.serialPort1.Open();
            }
            else
            {
                this.serialPort1.Open();
            }
        }


    }

    #region 1,定义事件接收参数
    public class MyEventArgs : EventArgs
    {
        //定义一个字符串数组用以存储串口发送数据
        private string comStr ="";

        public MyEventArgs(string ComStr)
        {
            this.comStr = ComStr;
        }

        public string ComString
        {
            set
            {
                this.comStr = value;
            }
            get
            {
                return this.comStr;
            }
        }
    }
    #endregion

    #region 2,声明一个代理类型
    /// <summary>
    /// 事件代理类型
    /// </summary>
    /// <param name="sender"></param>
    /// <param name="e"></param>
    public delegate void ReadComMessage(Object sender, MyEventArgs e);

    #endregion

    #region 3,建立包含事件河触发事件的类
    public class ComEventClass
    {
        /// <summary>
        /// 申明事件
        /// </summary>
        public event ReadComMessage ComEvent;

        protected virtual void OnComEvent(Object sender, MyEventArgs e)
        {
            if (this.ComEvent != null)
            {
                ComEvent(sender, e);
            }
        }

        /// <summary>
        /// 读取信息触发事件
        /// </summary>
        /// <param name="comStr"></param>
        public void ReadMessage( Object sender, string comStr)
        {
            if (comStr != "")
            {
                MyEventArgs e = new MyEventArgs(comStr);
                OnComEvent(sender, e);
            }
        }
    }
    #endregion

    #region 4,建立事件处理类
    public class EventDisposeClass
    {
        private static string comStrMessage = "";

        Form1 frm;
        /// <summary>
        /// 事件处理函数
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        public void ComDispose(Object sender, MyEventArgs e)
        {
            frm = (Form1)sender;
            frm.strTempxinxi += e.ComString;

            frm.PutInTextBox(e.ComString);
        }

        public delegate void addStr(string str);

        public void Adds(string str)
        {
            frm.textBox1.Text = str;
        }
    }
    #endregion
} --------------------编程问答-------------------- 自己顶下 --------------------编程问答-------------------- 没有解答啊!!!自己再顶下 --------------------编程问答-------------------- 楼主你是高手!
你的程序比较长,我没有仔细看,但是我认为不应该用String来保存接收的数据,应该用byte型数组来保存接收数据,然后再转换成string! --------------------编程问答-------------------- 关注…… --------------------编程问答-------------------- 请问楼主这个程序能否通过串口 , 只发送一个随便的信息?(不管接收)
补充:.NET技术 ,  C#
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,