Skip to content

SerialPort The Requested Resource is in Use (both .net core and .net framework) #30251

@chenxuuu

Description

@chenxuuu

I use this code:

using System;
using System.IO.Ports;
using System.Threading.Tasks;

namespace sp
{
    class Program
    {
        static void Main(string[] args)
        {
            SerialPort port = new SerialPort();
            port.PortName = "COM3";
            while (true)
            {
                Console.WriteLine($"port open: {port.IsOpen}");
                if (!port.IsOpen)
                {
                    foreach (var i in SerialPort.GetPortNames())
                    {
                        Console.WriteLine($"scan port {i}");
                        if (i == port.PortName)
                            try
                            {
                                port.Open();
                            }
                            catch (Exception e)
                            {
                                Console.WriteLine($"error: {e}");
                            }
                    }
                }
                Task.Delay(1000).Wait();
            }
        }
    }
}

I run this code, connect my 4GLTE device and srart it, the code connect success

but, if I restart my 4GLTE device(not disconnect, only press restart button, this COM will disappear in Device Manager), it will show an error message: The Requested Resource is in Use, and not disappear in serial port list.

when my device is restart ok, it will still report this error, until I close my program and rerun.

this bug is also in .net framework, same code.(I tried to report this, but nobody reply me)

code logs:

port open: False
port open: False
scan port COM3
scan port COM4
scan port COM5
port open: True
port open: True
port open: True
port open: False
scan port COM3
error: System.IO.IOException: 请求的资源在使用中。
   at System.IO.Ports.InternalResources.WinIOError(Int32 errorCode, String str)
   at System.IO.Ports.SerialStream..ctor(String portName, Int32 baudRate, Parity parity, Int32 dataBits, StopBits stopBits, Int32 readTimeout, Int32 writeTimeout, Handshake handshake, Boolean dtrEnable, Boolean rtsEnable, Boolean discardNull, Byte parityReplace)
   at System.IO.Ports.SerialPort.Open()
   at sp.Program.Main(String[] args) in C:\Users\chenx\Desktop\sp\sp\Program.cs:line 24
port open: False
scan port COM3
error: System.IO.IOException: 请求的资源在使用中。
   at System.IO.Ports.InternalResources.WinIOError(Int32 errorCode, String str)
   at System.IO.Ports.SerialStream..ctor(String portName, Int32 baudRate, Parity parity, Int32 dataBits, StopBits stopBits, Int32 readTimeout, Int32 writeTimeout, Handshake handshake, Boolean dtrEnable, Boolean rtsEnable, Boolean discardNull, Byte parityReplace)
   at System.IO.Ports.SerialPort.Open()
   at sp.Program.Main(String[] args) in C:\Users\chenx\Desktop\sp\sp\Program.cs:line 24

************some same logs**************

port open: False
scan port COM3
error: System.IO.IOException: 请求的资源在使用中。
   at System.IO.Ports.InternalResources.WinIOError(Int32 errorCode, String str)
   at System.IO.Ports.SerialStream..ctor(String portName, Int32 baudRate, Parity parity, Int32 dataBits, StopBits stopBits, Int32 readTimeout, Int32 writeTimeout, Handshake handshake, Boolean dtrEnable, Boolean rtsEnable, Boolean discardNull, Byte parityReplace)
   at System.IO.Ports.SerialPort.Open()
   at sp.Program.Main(String[] args) in C:\Users\chenx\Desktop\sp\sp\Program.cs:line 24

************* device restart complete here **************

port open: False
scan port COM3
error: System.IO.IOException: 请求的资源在使用中。
   at System.IO.Ports.InternalResources.WinIOError(Int32 errorCode, String str)
   at System.IO.Ports.SerialStream..ctor(String portName, Int32 baudRate, Parity parity, Int32 dataBits, StopBits stopBits, Int32 readTimeout, Int32 writeTimeout, Handshake handshake, Boolean dtrEnable, Boolean rtsEnable, Boolean discardNull, Byte parityReplace)
   at System.IO.Ports.SerialPort.Open()
   at sp.Program.Main(String[] args) in C:\Users\chenx\Desktop\sp\sp\Program.cs:line 24
scan port COM4
scan port COM5
port open: False
scan port COM3
error: System.IO.IOException: 请求的资源在使用中。
   at System.IO.Ports.InternalResources.WinIOError(Int32 errorCode, String str)
   at System.IO.Ports.SerialStream..ctor(String portName, Int32 baudRate, Parity parity, Int32 dataBits, StopBits stopBits, Int32 readTimeout, Int32 writeTimeout, Handshake handshake, Boolean dtrEnable, Boolean rtsEnable, Boolean discardNull, Byte parityReplace)
   at System.IO.Ports.SerialPort.Open()
   at sp.Program.Main(String[] args) in C:\Users\chenx\Desktop\sp\sp\Program.cs:line 24
scan port COM4
scan port COM5
port open: False
scan port COM3
error: System.IO.IOException: 请求的资源在使用中。
   at System.IO.Ports.InternalResources.WinIOError(Int32 errorCode, String str)
   at System.IO.Ports.SerialStream..ctor(String portName, Int32 baudRate, Parity parity, Int32 dataBits, StopBits stopBits, Int32 readTimeout, Int32 writeTimeout, Handshake handshake, Boolean dtrEnable, Boolean rtsEnable, Boolean discardNull, Byte parityReplace)
   at System.IO.Ports.SerialPort.Open()
   at sp.Program.Main(String[] args) in C:\Users\chenx\Desktop\sp\sp\Program.cs:line 24
scan port COM4
scan port COM5

************same logs forever**************

more infomation:

  1. I tried many different device, only this 4GLTE device will show this problem
  2. I tried many different serial port debug tools, I found that all of tools written in C# will show this problem, other written in cpp or python are all normal
  3. Same problem in .net framework (I tested on .net framework 4.7.2 and .net core 2.1)

is this my wrong usage?

Metadata

Metadata

Assignees

No one assigned

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions