C# 如何从dll中释放串行COM端口

C# 如何从dll中释放串行COM端口,c#,object,serial-port,dispose,C#,Object,Serial Port,Dispose,我正在使用.dll在我的代码中创建一个对象,在这个对象中.dll打开串行com端口,但在使用它之后不会释放组件。但是在我的应用程序中,我想再次打开comport,但是comport被.dll占用,所以它会给出错误 请给出解决方案 您的标签正确-这是Dispose模式。您要查找的类可能是SerialPort: 您应该使用以确保它已关闭。C#8甚至有一个新的、更简单的解决方案 这些标签让我有点困惑: 一方面,保持这样一个端口打开并使用DataReceived()事件对输入内容作出反应是有益的。在

我正在使用.dll在我的代码中创建一个对象,在这个对象中.dll打开串行com端口,但在使用它之后不会释放组件。但是在我的应用程序中,我想再次打开comport,但是comport被.dll占用,所以它会给出错误


请给出解决方案

您的标签正确-这是Dispose模式。您要查找的类可能是SerialPort:

您应该使用以确保它已关闭。C#8甚至有一个新的、更简单的解决方案

这些标签让我有点困惑:

  • 一方面,保持这样一个端口打开并使用DataReceived()事件对输入内容作出反应是有益的。在这种情况下,处理点取决于使用的显示技术/应用类型
  • 但是你也得到了ASP.Net标签。保持内容的开放性和ASP.Net没有那么好的混合。不管COm端口通常不是由Web应用程序控制的部分
正如您所说,您仅将其用于一次写入操作,这是对示例代码的轻微修改:

   // Create a new SerialPort object with default settings.
   //make a local variable for this
   using (var _serialPort = new SerialPort()){

        // Allow the user to set the appropriate properties.
        _serialPort.PortName = SetPortName(_serialPort.PortName);
        _serialPort.BaudRate = SetPortBaudRate(_serialPort.BaudRate);
        _serialPort.Parity = SetPortParity(_serialPort.Parity);
        _serialPort.DataBits = SetPortDataBits(_serialPort.DataBits);
        _serialPort.StopBits = SetPortStopBits(_serialPort.StopBits);
        _serialPort.Handshake = SetPortHandshake(_serialPort.Handshake);

        // Set the read/write timeouts
        _serialPort.ReadTimeout = 500;
        _serialPort.WriteTimeout = 500;

        _serialPort.Open();
       //Do stuff with the open port
   }
   //using has it Disposed when you get here. Or otherwise leave the block

为什么会有asp.net标记?这通常是您最不愿意与COM端口进行交互的事情。@Gaurav那么您的显示技术/环境是什么?WinForms?WPF?Windows服务?[待定]?我使用窗口窗体。我申请闪存设备。所以我使用dll。串口io.ports.serialport工作正常,但当我使用dll文件闪存设备时,它使用串口,但在闪存设备后不会释放。在此之后,我想打开串行端口,它给出了错误System.UnauthorizedAccessException:“对端口“COM4”的访问被拒绝。”因此,请帮助我如何从dll文件中释放comport。@Gaurav我修改了示例代码,以包含一个用于单个操作的代码。