【发布时间】:2017-03-05 20:37:02
【问题描述】:
我需要从COM 中读取Form1 中的数据,然后还要再次在Form2 中读取数据。
最好的方法是什么?
在Form1 中读取COM 数据,然后在mySerialPort.Close(); 中,在Form2 中打开新连接?
如果是这样,我应该在上面的代码中的哪个位置 close 呢?
还是不要关闭COM?如果不关闭,如何读取Form2中的数据?
namespace portreader
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
SerialPort mySerialPort = new SerialPort();
mySerialPort.PortName = "COM3";
mySerialPort.BaudRate = 9600;
mySerialPort.Parity = Parity.None;
mySerialPort.StopBits = StopBits.One;
mySerialPort.DataBits = 8;
mySerialPort.Handshake = Handshake.None;
mySerialPort.DataReceived += new SerialDataReceivedEventHandler(mySerialPort_DataReceived);
mySerialPort.Open();
}
string _buffer;
private void mySerialPort_DataReceived(object sender, SerialDataReceivedEventArgs e)
{
if (this.InvokeRequired)
{
// Using this.Invoke causes deadlock when closing serial port, and BeginInvoke is good practice anyway.
this.BeginInvoke(new EventHandler<SerialDataReceivedEventArgs>(mySerialPort_DataReceived), new object[] { sender, e });
return;
}
SerialPort sp = (SerialPort)sender;
string data = sp.ReadExisting();
_buffer += data;
if (_buffer.Length >= 8)
{
int chipnumber = Int32.Parse(_buffer, System.Globalization.NumberStyles.HexNumber);
Form2 form2 = new Form2(chipnumber);
form2.ShowDialog(this);
_buffer = null;
}
}
}
}
【问题讨论】:
-
就个人而言,我会创建一个专门处理应用程序的通信端口通信的类,并让两种形式都使用它。