Событие блокировки вызывает исключение ArgumentException - PullRequest
0 голосов
/ 25 мая 2019

Я делаю класс с последовательным инкапсулированием и хочу вернуться после отправки данных. Но блокировка ожидания возврата вызывает ошибку 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?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...