首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >拒绝访问端口'COM5‘

拒绝访问端口'COM5‘
EN

Stack Overflow用户
提问于 2012-09-30 07:42:46
回答 2查看 14K关注 0票数 1

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

代码语言:javascript
复制
      //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);
        }
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-09-30 08:11:52

您需要将SerialPort的用法包装在using statement中或实现IDisposable

代码语言:javascript
复制
// 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.
}
票数 2
EN

Stack Overflow用户

发布于 2021-10-17 18:35:05

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

代码语言:javascript
复制
                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;
            }
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12657479

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档