В моей .NET приложения мне нужно, чтобы достичь последовательного настройки порта эквивалент этой C++ управляемого кода:Настройка последовательных портов RS232; любой в C# альтернатива классу SerialPort?
::SetCommMask(m_hCOMM, EV_RXCHAR);
::SetupComm(m_hCOMM, 9*2*128*10, 400);
::PurgeComm(m_hCOMM, PURGE_TXABORT|PURGE_RXABORT|PURGE_TXCLEAR|PURGE_RXCLEAR);
COMMTIMEOUTS timeOut;
timeOut.ReadIntervalTimeout = 3;
timeOut.ReadTotalTimeoutConstant = 3;
timeOut.ReadTotalTimeoutMultiplier = 1;
timeOut.WriteTotalTimeoutConstant = 0;
timeOut.WriteTotalTimeoutMultiplier= 0;
int nRet= ::SetCommTimeouts(m_hCOMM, &timeOut);
::EscapeCommFunction(m_hCOMM, SETDTR);
::EscapeCommFunction(m_hCOMM, SETRTS);
DCB dcb;
memset(&dcb, 0, sizeof(DCB));
dcb.BaudRate= m_nSpeed;
dcb.ByteSize= 8;
dcb.fParity = FALSE;
dcb.Parity = NOPARITY;
dcb.StopBits= ONESTOPBIT;
dcb.fBinary = TRUE;
dcb.fDsrSensitivity= FALSE;
dcb.fOutxDsrFlow= FALSE;
dcb.fOutxCtsFlow= FALSE;
dcb.fDtrControl = DTR_CONTROL_HANDSHAKE;
dcb.fRtsControl = RTS_CONTROL_TOGGLE;
nRet= ::SetCommState(m_hCOMM, &dcb);
Возможно ли это вообще? Как мне подойти к этой проблеме? Существуют ли какие-либо (предпочтительные бесплатные) библиотеки, которые разрешают такое управление последовательным портом низкого уровня, или я должен создать свою собственную оболочку поверх Win32 api? Кто-нибудь сделал что-то подобное или имеет идею, как «склеить» последовательный порт win32 с api с .net, чтобы я мог использовать аккуратные события .NET DataReceived()? Или, может быть, я могу создать экземпляр .NET SerialPort, а затем изменить его с помощью управляемого API?
Класс SerialPort делает все, что делает ваш фрагмент кода. Не нужно изменять его. –