Класс System.IO.Ports.SerialPort
использует внутреннюю оболочку для низкоуровневых коммуникационных функций порта операционной системы, System.IO.Ports.InternalResources .
Этот модуль имеет дело сОшибки ввода / вывода и преобразует их в управляемые System.IO.IOException
.К сожалению, некоторые из них не используют числовой код ошибки, только текст, который подлежит переводу (идентификатор ресурса и перевод en-us):
IO_PortNotFound "The specified port does not exist."
IO_PortNotFoundFileName "The port '{0}' does not exist."
IO_SharingViolation_NoFileName "The process cannot access the port because it is being used by another process."
IO_SharingViolation_File "The process cannot access the port '{0}' because it is being used by another process."
Все коды WinREi HREsult, которые не сопоставлены ни с какимииз этих четырех строк исключений преобразуются в IOException
с использованием HResult
и текста, который Windows API предоставляет через FormatMessage
API.
Из множества подклассов IOException
только EndOfStreamException
используется в контексте serialport и может быть специально перехвачен или опрошен следующим образом:
if(IOEx is EndOfStreamException)
{
var eosex = IOEx as EndOfStreamException;
...
}