Я не думаю, что GetPortNames () или Open () вызывают вашу проблему: я уверен, что это связано с аппаратным обеспечением.Вы пробовали свой код на другом компьютере?
К сожалению, у меня нет прямого опыта с вашим сценарием, так как двузначные порты всегда работали для меня ... Но есть одна вещь, которую я хотел быотметить: со временем я понял, что лучше быть в безопасности, чем сожалеть, и, таким образом, я увеличил свое использование блоков try-catch.В вашем случае, я бы сделал это:
static System.Diagnostics.Stopwatch timer = new System.Diagnostics.Stopwatch();
private static int defaultBaudRate = 9600, defaultDataBits = 8;
static System.IO.Ports.SerialPort TryOpeningPort(string portName)
{
System.IO.Ports.SerialPort port = null;
timer.Start();
try
{
port = new System.IO.Ports.SerialPort(portName,
defaultBaudRate, System.IO.Ports.Parity.None, defaultDataBits, System.IO.Ports.StopBits.One);
port.Open();
port.Close();
/**/Console.WriteLine(portName + " : OK");
}
catch (Exception exceptionInfo) //most common is System.UnauthorizedAccessException
{
port = null;
/**/Console.WriteLine(portName + " -- " + exceptionInfo.GetType().ToString() + " : " + exceptionInfo.Message);
}
timer.Stop();
//Console.WriteLine("Elapsed time : " + timer.ElapsedMilliseconds + "ms" + System.Environment.NewLine);
timer.Reset();
return port;
}
Вы можете вызвать это либо напрямую, как в:
TryOpeningPort("COM10");
, либо используя метод начальной проверки:
foreach (string portName in System.IO.Ports.SerialPort.GetPortNames())
if (portName.Equals("Com10", StringComparison.InvariantCultureIgnoreCase))
TryOpeningPort(portName);