我在类中声明了Private WithEvents port As New SerialPort("COM1")对象,此对象port的事件(系统自动生成)port_DataReceived(ByVal sender As Object, ByVal e As System.IO.Ports.SerialDataReceivedEventArgs) Handles port.DataReceived 不知为何总不能激发。
可是声明Private WithEvents port As New SerialPort("COM1")对象在窗口中,就一切正常,接收数据事件正常,为什么?
vb中激发事件好象有个.raiseevent吧,是否和这个有关???
还有若是有懂串口SerialPort类的,偶真心请教,为什么我port.read(),port.readline()什么数据都读不到直到超时???只能在接收事件中才收得到数据??真不懂怎么搞的??正解另开贴赠分100!!!
可是声明Private WithEvents port As New SerialPort("COM1")对象在窗口中,就一切正常,接收数据事件正常,为什么?
vb中激发事件好象有个.raiseevent吧,是否和这个有关???
还有若是有懂串口SerialPort类的,偶真心请教,为什么我port.read(),port.readline()什么数据都读不到直到超时???只能在接收事件中才收得到数据??真不懂怎么搞的??正解另开贴赠分100!!!
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Threading;namespace HelloPDACom
{
delegate void MessageReceived(char[] data, string title);
public partial class Form1 : Form
{
MessageReceived mr;
public Form1()
{
InitializeComponent();
this.mr = new MessageReceived(this.ReadData);
} private void button1_Click(object sender, EventArgs e)
{
if (this.serialPort1.IsOpen)
{
this.serialPort1.Close();
}
Application.Exit();
} private void Open_Click(object sender, EventArgs e)
{
if (!this.serialPort1.IsOpen)
{
this.serialPort1.Open();
this.Text = "SerialPort Opened";
}
} private void Close_Click(object sender, EventArgs e)
{
if (this.serialPort1.IsOpen)
{
this.serialPort1.Close();
this.Text = "SerialPort Closed";
}
} private void Send_Click(object sender, EventArgs e)
{
if (this.serialPort1.IsOpen)
{
this.serialPort1.WriteLine(this.textBoxSend.Text);
}
} private void serialPort1_DataReceived(object sender, System.IO.Ports.SerialDataReceivedEventArgs e)
{
char[] data = new char[10];
this.serialPort1.Read(data, 0, 10);
this.textBoxGet.Invoke(this.mr, data, "Data Received");
} private void Read_Click(object sender, EventArgs e)
{
if (this.serialPort1.BytesToRead > this.serialPort1.ReceivedBytesThreshold)
{
char[] data = new char[10];
this.serialPort1.Read(data, 0, 10);
StringBuilder sb = new StringBuilder();
sb.Append(data);
this.textBoxGet.Text += sb.ToString();
}
} private void ReadData(char[] data, string title)
{
StringBuilder sb = new StringBuilder();
sb.Append(data);
this.textBoxGet.Text += sb.ToString();
this.Text = title;
}
}
}this.serialPort1.ReceivedBytesThreshold = 10;
this.serialPort1.DataReceived += new System.IO.Ports.SerialDataReceivedEventHandler(this.serialPort1_DataReceived);
但是你的serialPort1也是放在 class Form1 : Form中,既放在窗口中的;放在窗口的我没问题,只是我想把serialPort1对象封装在另外一个自己写的类中,可是这个对象serialPort1的事件不能激发,既serialPort1_DataReceived(objectsender, System.IO.Ports.SerialDataReceivedEventArgs e)
??