【发布时间】:2016-02-04 16:00:33
【问题描述】:
我正在编写一个应用程序,该应用程序旨在从串行端口读取数据,然后将数据绘制在图表上并将其保存到日志文件中。到目前为止,我正在处理初始串行端口设置和打开/关闭。
有一个组合框可以选择要使用的串行端口,还有一个用于连接/断开连接的按钮。与串行端口断开连接是否重要,或者当应用程序关闭时 Windows 会自动执行此操作?
代码如下:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.IO.Ports;
namespace FieldProbe
{
public partial class MainForm : Form
{
public MainForm()
{
InitializeComponent();
}
private void MainForm_Load(object sender, EventArgs e)
{
var ports = SerialPort.GetPortNames();
cmbSerialPorts.DataSource = ports;
}
private void btnConnect_Click(object sender, EventArgs e)
{
if (btnConnect.Text == "Connect")
{
btnConnect.Text = "Disconnect";
if (cmbSerialPorts.SelectedIndex > -1)
{
MessageBox.Show(String.Format("You selected port '{0}'", cmbSerialPorts.SelectedItem));
Connect(cmbSerialPorts.SelectedItem.ToString());
}
else
{
MessageBox.Show("Please select a port first");
}
}
else
{
btnConnect.Text = "Connect";
port.Close();
}
}
private void Connect(string portName)
{
var port = new SerialPort(portName);
if (!port.IsOpen)
{
port.BaudRate = 921600;
port.DataBits = 8;
port.StopBits = StopBits.One;
port.Parity = Parity.None;
port.Handshake = Handshake.None;
port.Open();
}
}
}
}
这是无耻地从几个例子中提取的,我不是专业的编码器。 “port.close”行不起作用,似乎我无法从“连接”以外的任何功能访问“端口”。从其他功能访问此端口的最佳解决方案是什么?
【问题讨论】:
-
你需要了解变量作用域
-
在您的按钮处理程序中,您将“活动端口”称为
cmbSerialPorts.SelectedItem.ToString()(至少是端口名称)。那么为什么不做一个var port = new SerialPort(cmbSerialPorts.SelectedItem.ToString()); port.Close();呢?也可以考虑将Connect()中创建的port保存到数组中,或者在这个类中将port变成private SerialPort(即改变port的作用域)。 -
关闭你的应用程序会自动关闭你的端口
标签: c# serial-port port