Я делаю класс с последовательным инкапсулированием и хочу вернуться после отправки данных.
Но блокировка ожидания возврата вызывает ошибку ArgumentException.
Запустите winform, чтобы убедиться, что параметры верны, но кажется, что события блокировки будут вызваны.
включают:
EventWaitHandle.WaitOne (3000, ложно);
SerialPort.Read ();
И есть вызов C ++ для записи Dll, будет ли он записан в защищенную память, вызванную?
//Raise the error
//Adopted two methods
//one,EventWaitHandle ,The serialPort.DataReceived event fires when _waitHandle.Set();
serialPort.Write(buf, 0, buf.Length);
_waitHandle.WaitOne(3000, false);
//Two
serialPort.ReadTimeout = 3000;
serialPort.Write(buf, 0, buf.Length);
serialPort.Read(buf, 0, 4);
Интересно то, что каждый раз, когда это третий тайм-аут, он сообщит об ошибке. Попытка не может быть поймана. Приглашение автоматически выйдет из программы после того, как возникнет исключение. Тайм-аут TimeoutException может быть перехвачен.
И если вы не заблокируете, не вернетесь, вы не получите сообщение об ошибке.
Спасибо за ваш ответ, извините, что не написал ясно. Серийный порт - это связь с монетоприемником, а Dll - еще один пакет для связи с камерой canon.
Сегодня при тестировании программы выключения я обнаружил, что видеопоток Stream of the canon запрашивает ArgumentException. Поскольку serialPort и canon - это два разных потока, каждый из которых выполняет разные задачи, поэтому проблему следует определить здесь.
private void SDK_LiveViewUpdated(UnmanagedMemoryStream img)
{
Evf_Bmp?.Dispose();
Evf_Bmp = new Bitmap(img);//ArgumentException
}
Так что serialport и canon - это разные потоки, поэтому блокировка serialport вызывает аргумент UnonMemoryStream для canon
И каждый раз, когда он блокируется в третий раз, ArgumentException?