C# 从串口读取数据;关闭然后打开应用程序时出错
我创建了一个从串口读取数据的应用程序,它工作得很好。但是当我关闭应用程序并再次运行它时,问题就出现了。突然,从串行端口读取的数据停止工作。我必须断开连接USB才能解决这个问题 这是我的代码:C# 从串口读取数据;关闭然后打开应用程序时出错,c#,serial-port,C#,Serial Port,我创建了一个从串口读取数据的应用程序,它工作得很好。但是当我关闭应用程序并再次运行它时,问题就出现了。突然,从串行端口读取的数据停止工作。我必须断开连接USB才能解决这个问题 这是我的代码: namespace Serial { public partial class Main : Form { SerialPort mainSerialPort = new SerialPort(); public Main() {
namespace Serial
{
public partial class Main : Form
{
SerialPort mainSerialPort = new SerialPort();
public Main()
{
InitializeComponent();
}
delegate void SetTextCallback(string text);
private void buttonOpen_Click(object sender, EventArgs e)
{
mainSerialPort.PortName = "COM" + numericPort.Value.ToString();
mainSerialPort.BaudRate = 115200;
mainSerialPort.Parity = Parity.None;
mainSerialPort.StopBits = StopBits.One;
mainSerialPort.DataBits = 8;
mainSerialPort.Handshake = Handshake.None;
mainSerialPort.DataReceived += DataReceived_Read;
try{
mainSerialPort.Open();
}catch (Exception ex){
labelStatus.Text = ex.GetType().ToString();
}
if (mainSerialPort.IsOpen == true){
numericPort.BackColor = Color.Green;
labelStatus.Text = "Port je otevřen!";
}else{
numericPort.BackColor = Color.Red;
}
}
private void DataReceived_Read(object sender, SerialDataReceivedEventArgs e)
{
SerialPort mySerial = (SerialPort)sender;
if (this.InvokeRequired){
listBoxRead.Invoke(new MethodInvoker(delegate {
listBoxRead.Items.Add(mySerial.ReadExisting());
listBoxRead.SelectedIndex = listBoxRead.Items.Count - 1;
}));
}
}
private void Main_FormClosed(object sender, FormClosedEventArgs e)
{
mainSerialPort.DataReceived -= DataReceived_Read;
mainSerialPort.Close();
}
}
}
USB和串行端口是非托管资源。你得把它处理掉!。在FormClosed上进行简单的关闭不会起到同样的作用。我认为这与一些资源没有正确释放有关。尝试调用Dispose方法
mainSerialPort.Close();
mainSerialPort.Dispose();
我尝试过处理它,但仍然一无所获:Close和Dispose执行完全相同的操作。如果不使用握手,则必须将DtrEnable和RtsEnable属性设置为true。一个串行设备会注意到这些信号,当它们关闭时会拒绝发送任何东西。非常感谢你!你真棒!它工作得很好;