关于C#上位机接收串口数据并绘图的问题
using System;
using System.Collections.Generic;
using System.Collections;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.IO.Ports;
namespace PC上位机
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
serialPort.DataReceived += new System.IO.Ports.SerialDataReceivedEventHandler(serialPort_DataReceived);
}
private void CKbutton_Click(object sender, EventArgs e) //“打开关闭串口”按钮
{
string CommNum = this.CKH.Text;
int IntBdr = Convert.ToInt32(this.BTL.Text);//将串口号和波特率存起来
if (!serialPort.IsOpen) //如果串口是关闭的
{
serialPort.PortName = CommNum;
serialPort.BaudRate = IntBdr; //设定串口号和波特率
try //try:尝试下面的代码,如果错误就跳出来执行catch里面代码
{
serialPort.Open(); //打开串口
CKbutton.Text = "关闭串口"; //改变按钮上的字符
CKH.Enabled = false;
BTL.Enabled = false;
}
catch
{
MessageBox.Show("串口打开失败了!\n\n可能是串口已补占用。");
}
}
else//如果串口是打开的
{
serialPort.Close(); //关闭串口;
CKbutton.Text = "打开串口"; //改变按钮上的字符
CKH.Enabled = true;
BTL.Enabled = true; //将串口号与波特率选择控件打开
}
}
ArrayList data = new ArrayList();
public ArrayList Data
{
get { return data; }
set { data = value; }
}
Pen myPen = new Pen(Color.Red);
#region xy增益与坐标申明
private float xGain;//x增益
public float XGain
{
get { return xGain; }
set { xGain = value; }
}
private float yGain;//y增益
public float YGain
{
get { return yGain; }
set { yGain = value; }
}
private float xOrigin;//x原点
public float XOrigin
{
get { return xOrigin; }
set { xOrigin = value; }
}
private float yOrigin;//y原点
public float YOrigin
{
get { return yOrigin; }
set { yOrigin = value; }
}
private float xNext;//x新坐标
public float XNext
{
get { return xNext; }
set { xNext = value; }
}
private float yNext;//y新坐标
public float YNext
{
get { return yNext; }
set { yNext = value; }
}
private float i;
public float I
{
get { return i; }
set { i = value; }
}
#endregion
private void serialPort_DataReceived(object sender, System.IO.Ports.SerialDataReceivedEventArgs e)
{
for (int d = 0; d < 8; d++)
{
data.Add(serialPort.ReadByte());
}
}
public void draw()
{
Bitmap bm = new Bitmap(pictureBox1.Width, pictureBox1.Height);
Graphics g = Graphics.FromImage(bm);
xGain = i;
i = (float)(i + 0.01);
yGain = float.Parse(data[7].ToString());
data.Clear();
xNext = xGain + xOrigin;
yNext = yGain + yOrigin;
g.DrawLine(myPen, xOrigin, yOrigin, xNext, yNext);
xOrigin = xNext;
yOrigin = yNext;
g.Dispose();
g = this.pictureBox1.CreateGraphics();
g.DrawImage(bm, 0, 0);
g.Dispose();
//数据测试代码段:
textBox1.Invoke(new EventHandler(delegate
{
textBox1.AppendText(Convert.ToString(data[data.Count - 1]) + " ");
textBox1.ScrollToCaret();
}));
data.Clear();
}
private void timer1_Tick_1(object sender, EventArgs e)
{
draw();
}
大家帮我看看这段代码,上位机接收串口数据并绘图。为什么textBox1收不到数据,pictureBox1也无法绘图.