重用虚拟COM端口

制卡人

会员
已加入
一月12,2019
留言内容
20
编程经验
Beginner
您好,我试图在第二次重用USB串行虚拟机,但应用程序挂起,第一次使用时一切正常,但是当我关闭端口或关闭应用程序时,我无法再次使用虚拟com,则必须拔下USB电缆并重新连接才能工作。

C#:
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;
using System.IO.Ports;

namespace vcp2
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            button2.Enabled = false;
            label2.Visible = false;
            SerialPort.GetPortNames();
            string[] ports = SerialPort.GetPortNames();
            comboBox2.Items.AddRange(ports);
            comboBox2.SelectedIndex = 0;
            
        }

        System.IO.Ports.SerialPort sp = new System.IO.Ports.SerialPort();
      
    
        
        private void button1_Click(object sender, EventArgs e)
        {
            sp.PortName = comboBox2.Text;
            sp.BaudRate = 9600;
            sp.Parity = Parity.Even;// None;
            sp.DataBits = 8;
            sp.StopBits = StopBits.One;
            button2.Enabled = true;
            button1.Enabled = false;
            label2.Text = comboBox2.Text + " OPEN:";
            label2.ForeColor = System.Drawing.Color.Green;
            label2.Visible = true;

           byte[] received = new byte[256];
            
           try
           {
               sp.Open();

               sp.RtsEnable = false;
               System.Threading.Thread.Sleep(500);
            
               int bytesRead = sp.Read(received, 0, received.Length);
               if (bytesRead != 0)
               {
                   string rec = BitConverter.ToString(received);
                   textBox1.Text = rec;
                  
               }
           }
           catch (Exception ex)
           {
               MessageBox.Show(ex.Message);
           }
        }

        private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)
        {

        }

        private void button2_Click(object sender, EventArgs e)
        {
            sp.Close();
            sp.Dispose();
            button2.Enabled = false;
            button1.Enabled = true;
            textBox1.Clear();
            label2.Visible = false;
            label2.Text = comboBox2.Text + " CLOSED:";
      
        }

  


    }
}

有人建议吗?
 

跳伞

工作人员
已加入
2019年4月6日
留言内容
2,500
地点
弗吉尼亚州切萨皮克
编程经验
10+
尝试使用其他硬件/驱动程序组合。

基于上面代码的快速扫描,该代码在关闭和处置资源方面看起来是正确的。更重要的是,即使关闭应用程序也不会释放端口。从Windows的角度来看,当一个应用程序被杀死时,它会释放它可能已经获取的任何资源。
 
最佳 底部