我正在編寫一個應用程序,該應用程序旨在從串行端口讀取數據,然後在圖形上繪製數據並將其保存到日誌文件中。到目前爲止,我正在進行初始串口設置和打開/關閉。使用多功能串口連接?
有一個組合框可以選擇要使用的串口,以及一個連接/斷開連接的按鈕。從串行端口斷開連接是重要的還是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」行不起作用,似乎我無法從「連接」以外的任何其他功能訪問「端口」。從其他功能訪問此端口的最佳解決方案是什麼?
您需要了解變量作用域 –
在您的按鈕處理程序中,您將「active port」稱爲cmbSerialPorts.SelectedItem.ToString()(端口名稱atleast)。那麼爲什麼不做'var port = new SerialPort(cmbSerialPorts.SelectedItem.ToString()); port.Close();'?你也可以考慮將在'Connect()'中創建的'port'保存到一個數組中,或者把'port'作爲'private SerialPort'在這個類中(即改變'port'的範圍)。 –
關閉您的應用程序將自動關閉您的端口 – Fruchtzwerg