【问题标题】:C# access denied when trying to access communications port?尝试访问通信端口时 C# 访问被拒绝?
【发布时间】:2019-11-29 21:37:46
【问题描述】:

我正在尝试在 Visual Studios 中制作一个简单的 Windows 窗体应用程序,它允许我控制连接到 Arduino 的 LED 灯条的亮度设置。

Arduino 内部的编程已经完成,但 C# 编程给我带来了麻烦。

尝试通过端口发送信息字符串时,我收到以下消息:

System.dll 中发生了“System.UnauthorizedAccessException”类型的未处理异常。 附加信息:对端口“COM3”的访问被拒绝。

这是给我带来麻烦的代码:

  private void trackBar1_Scroll(object sender, EventArgs e)
    {    
        String color = trackBar1.Value.ToString();

        System.IO.Ports.SerialPort myPort = new System.IO.Ports.SerialPort("COM3");
        if (myPort.IsOpen == false){
         //if not open, open the port
            myPort.Open(); // Error is shown here.
        }
        if (myPort.IsOpen){
            myPort.WriteLine(color);
        }
    }

我没有关闭端口,因为首先我想让它工作,但我不明白发生了什么。我很确定没有其他应用程序正在使用该端口。 Arduino 通过 USB 插入它以接收它的电源,但除此之外,它不会从任何其他进程接收或传输。

我尝试将端口从 COM3 更改为其他端口,这是针对类似问题给出的主要解决方案之一,但我仍然得到相同的结果。

感谢您的帮助。

【问题讨论】:

  • 在 Scroll 事件中打开串行端口永远不会正确,该事件完全太频繁地触发。 SerialPort 不支持快速打开和关闭端口,有一个工作线程需要退出,需要时间。打开您在构造函数中使用的端口,并在 UI 的整个生命周期内保持打开状态。
  • 我同意你说将它放在 Scroll 事件中是不正确的(我仍在学习整个 c# 和 Visual Studio 方法)但串行端口不一定要打开每个它被触发的时间,因为它被封装在 if 语句中。不过,我会牢记构造函数部分,只要我知道如何在 UI 中使用构造函数即可。谢谢@HansPassant!

标签: c# arduino serial-port


【解决方案1】:

COM 端口上的访问被拒绝错误的最常见原因是 COM 端口已被其他程序打开。您可以使用portmon 查看是哪个程序。它很可能是您自己的程序,因为您从未正确关闭端口。

【讨论】:

  • 可能是因为串口监视器正在使用它还是可能是Arduino IDE?
【解决方案2】:

N.K 在其中一个 cmets 中回答了这个问题:确保串行监视器不工作。

【讨论】:

    猜你喜欢
    • 2016-04-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-04
    • 1970-01-01
    • 2021-07-10
    • 2013-11-25
    相关资源
    最近更新 更多