gpt4 book ai didi

c# - 如何确定是什么使用了串口资源导致访问被拒绝?

转载 作者:行者123 更新时间:2023-12-04 17:54:43 26 4
gpt4 key购买 nike

我已经厌倦了经常与这个斗争。有问题的 PC 是工业触摸屏模型,永远不应改变。这是 Windows 10,而我相信它也发生在 Windows 7 上。虽然在过去有时这个错误处理模拟的 com 端口(即 USB 连接器),在这种情况下它是一个真正的 com 端口,所以我不能只是插入因为我使用了两个 232 连接器,所以它变成了另一个。 PC 可以正常工作数月,然后有一天 COM 端口出现问题,我将不得不调整它们,试图找出现在哪些工作正常。当我必须远程(1000 英里外)使用有时不得不将电缆插入不同位置的技术人员时,这是一个很大的痛苦。

为了用我的原始程序消除任何东西,我创建了一个非常简单的测试应用程序,如下所示:

Imports System.IO.Ports

Public Class Form1

Private Sub Form1_Load(sender As Object, e As EventArgs) Handles Me.Load

Try
Dim tempList As List(Of String) = SerialPort.GetPortNames.ToList
ListBox1.DataSource = tempList

Catch ex As Exception
MessageBox.Show(ex.Message)
End Try

End Sub

Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click

Dim tempPort As New SerialPort
tempPort.PortName = "COM1"

Try
tempPort.Close()

Catch ex As Exception
MessageBox.Show("Closing error: " & ex.ToString)
End Try

Try
tempPort.Open()
MessageBox.Show("COM1 Opened")

Catch ex As Exception
MessageBox.Show("Open error: " & ex.ToString)
End Try

End Sub
End Class

即使在重新启动后 ,我在关闭尝试时没有收到任何错误,但是当我尝试打开它时传统访问被拒绝。当然,它确实出现在 ListBox1 中。

System.UnauthorizedAccessException: Access to the port 'COM1' is denied. 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()



触摸屏总是应该在 COM4 上,当我查看提供的配置实用程序时,它总是出现。进入设备管理器显示我在 COM1 的 IRQ 或内存位置上没有看到任何冲突。是什么阻止了这个小测试应用程序在重启后打开这台 PC 上的端口?!?!?

更新:
至少现在,它以某种方式神奇地“修复”了自己(我打赌是小鬼)。经过几个小时的研究,我重新回到远程,看看重新启动到安全模式是否会有所帮助,并且看到我的正常程序正在运行!什么?!?!?我问技术人员他做了什么来修复它,他认为我已经做了一些事情来修复它。啊!!!我仍然需要找到一个答案,这样当我们用头撞墙时,下一次发生这种情况时,生产 PC 不会停机 16 小时。

最佳答案

您可能会收到该异常,因为您在关闭端口后没有等待。

来自 SerialPort.Close文件

The best practice for any application is to wait for some amount of time after calling the Close method before attempting to call the Open method, as the port may not be closed instantly.



不幸的是,没有办法知道您需要等待多长时间。您可以从 100 毫秒开始,然后逐步增加。如果它不会打扰用户,我会选择 500 毫秒以确保安全。

理想情况下,您会 Open端口一次和 Close当您的程序关闭时。

关于c# - 如何确定是什么使用了串口资源导致访问被拒绝?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41244750/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com