C# 从dll打开端口时未经授权的DaccessException串行端口
我在C#中使用System.IO.Ports.SerialPort类。从驻留在不同dll中的my helper类打开串行端口时引发UnAuthorizedAccessException。如果从win表单本身打开端口,则打开端口成功C# 从dll打开端口时未经授权的DaccessException串行端口,c#,dll,unauthorizedaccessexcepti,C#,Dll,Unauthorizedaccessexcepti,我在C#中使用System.IO.Ports.SerialPort类。从驻留在不同dll中的my helper类打开串行端口时引发UnAuthorizedAccessException。如果从win表单本身打开端口,则打开端口成功 _portNames = new List<string>(); _portNames.AddRange(SerialPort.GetPortNames()); _serialPort = new SerialPort(); _serialPort.
_portNames = new List<string>();
_portNames.AddRange(SerialPort.GetPortNames());
_serialPort = new SerialPort();
_serialPort.DataReceived += new SerialDataReceivedEventHandler(serialPort_DataReceived);
_serialPort.ErrorReceived += new SerialErrorReceivedEventHandler(serialPort_ErrorReceived);
var index = 0;
while (!_serialPort.IsOpen && index < _portNames.Count)
{
try
{
_serialPort.PortName = _portNames[index++];
_serialPort.Open();
}
catch (Exception ee)
{
_logger.Log(ee.Message, EventLogEntryType.Warning);
}
}
\u portNames=new List();
_AddRange(SerialPort.GetPortNames());
_serialPort=新的serialPort();
_serialPort.DataReceived+=新的SerialDataReceiveDevenHandler(serialPort_DataReceived);
_serialPort.ErrorReceived+=新的SerialErrorReceivedEventHandler(serialPort\u ErrorReceived);
var指数=0;
而(!\u serialPort.IsOpen&&index<\u portNames.Count)
{
尝试
{
_serialPort.PortName=_portNames[index++];
_serialPort.Open();
}
捕获(异常ee)
{
_logger.Log(ee.Message,EventLogEntryType.Warning);
}
}
COM1上已打开端口
谢谢当您打开串口时,应始终检查串口是否尚未打开。可能有另一个应用程序打开了COM端口 请在您的
\u serialPort.Open()语句上方尝试此代码:
try
{
_serialPort.PortName = _portNames[index++];
if (_serialPort.IsOpen)
{
MessageBox.Show(string.Concat(_serialPort.PortName, " is already opened by another application!"));
}
else
{
_serialPort.Open();
}
}
那是下载的动态链接库吗?不,我已经写了动态链接库。这里是_portNames=new List()_AddRange(SerialPort.GetPortNames())_serialPort=serialPort??新的串行端口()_serialPort.DataReceived+=新的SerialDataReceiveDevenHandler(serialPort_DataReceived)_serialPort.ErrorReceived+=新的SerialErrorReceivedEventHandler(serialPort\u ErrorReceived);我已根据您的评论将您的代码编辑到您的问题中-也许您可以检查是否确定,然后单击问题下方的“编辑”链接以进行更多更改。当端口已在使用时,您会遇到该异常。这可能是另一个在您之前打开端口的进程。最常见的错误是,实际上是您的程序已经打开了它。不要试图在“窗体”和DLL中打开它。您必须将对表单中创建的SerialPort的引用传递给DLL中的代码。此解决方案不起作用。IsOpen
属性仅用于跟踪实例是否已调用Open
。它不会检查是否有任何其他应用程序打开了该端口<代码>IsOpen属性跟踪端口是否已打开供调用方使用,而不是跟踪端口是否已由计算机上的任何应用程序打开。