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#