拒绝访问端口'COM5'



从我的表单运行下面的方法时,Access to the port 'COM5' is denied.收到以下错误消息。我尝试从设备管理器的端口设置中输入正确的波特率 9600。我也尝试通过Portmon访问设备,但是有一个错误阻止我连接。有什么替代方法可以解决这个问题吗?

      //Fields
    List<string> myReceivedLines = new List<string>();
    //subscriber method for the port.DataReceived Event
    private void DataReceivedHandler(object sender, System.IO.Ports.SerialDataReceivedEventArgs e)
    {
        SerialPort sp = (SerialPort)sender;
        while (sp.BytesToRead > 0)
        {
            try
            {
                myReceivedLines.Add(sp.ReadLine());
            }
            catch (TimeoutException)
            {
                break;
            }
        }
    }
    protected override void SolveInstance(IGH_DataAccess DA)
    {
        string selectedportname = default(string);
        DA.GetData(1, ref selectedportname);
        int selectedbaudrate = default(int);
        DA.GetData(2, ref selectedbaudrate);
        bool connecttodevice = default(bool);
        DA.GetData(3, ref connecttodevice);
        port.DtrEnable = true;   //enables the Data Terminal Ready (DTR) signal during serial communication (Handshaking)
        port.Open();             //Open the port
        if (!(port.IsOpen == true)) port.Open();

        if (connecttodevice == true)
        {
            port.DataReceived += new SerialDataReceivedEventHandler(DataReceivedHandler);
            DA.SetDataList(0, myReceivedLines);
        }
你需要将

SerialPort 的使用包装在 using 语句中或实现 IDisposable

// Dispose() calls Dispose(true)
public void Dispose()
{
    Dispose(true);
    GC.SuppressFinalize(this);
}
// The bulk of the clean-up code is implemented in Dispose(bool)
protected virtual void Dispose(bool disposing)
{
    if (disposing)
    {
        // free managed resources
        if (_serialPort != null)
        {
            _serialPort.Dispose();
            _serialPort = null;
        }
    }
    // free native resources if there are any.
}

我在串行端口的侦听器上遇到了问题,主进程卡住了 - 因为它是同步的。 进程,通过创建线程和计时器来解决

                try
            {
                if (_serialConnection.IsOpen) _serialConnection.Close();
                _serialConnection.Open();
                Thread newThread = new Thread((obj) =>
                {
                    System.Timers.Timer timer = new System.Timers.Timer();
                    timer.Interval = 1000;
                    timer.Elapsed += (sender, e) =>
                    {
                        _slave.Listen();
                    };
                    timer.Enabled = true;
                    timer.Start();
                    
                });
                newThread.IsBackground = true;
                newThread.Start();
            }
            catch (Exception ex)
            {
                throw ex;
            }

最新更新