Задать вопрос
@Dxpl

System.OperationCanceledException" в System.IO.Ports.dll. Как правильно закрывать порт?

День добрый
Пишу прогу, .Net c# WPF, принимает и обрабатывает данные по COM порту. Используется SerialPorts из System.IO.Ports.dll
Красным полупрозрачным маркером на скринах выделено то, что по моему не влияет на ошибку. Элементы wpf и другая "косметика"
6804793815977087498072.png
Метод CloseSerial сначала переключает int portState в 0, за которым следят while(след скрин), потом закрывает порт
portState используется в:68047a0b9122b320244521.png
асинхронный метод запускается после открытия порта с помощью:68047aaf6940d378443807.png
Открывается порт нормально, и закрывается тоже.... если не читать с него строки.
А именно: Если убрать строчку 68047afc65f1e043215744.png из метода GetData, он запускается и выключается нормально. Но информацию, понятно, не читает.
При попытке закрыть порт, когда он читается, вылазит тот самый System.OperationCanceledException" 68047b9a82ff6980303465.png
Приложение крашит, обработать исключение у меня не получилось. Инфы в инете тоже нету, только решенные вопросы по Azure, но там не мой случай. На learn.microsoft ничего толком не понял, как то слишком профессионально у них написано
Что сделал:
Думал порт долго закрывается. Но!
68047c842db56763666948.png
Последнее сообщение в выводе перед возникновением исключения - Next hop SerialP.Close()
Оно пишется перед закрытием порта в CloseSerial() 68047ccdca6a0541636573.png
Плюс не сработали эти writeline-ы 68047d0b7ad38296611303.png
Тогда я вообще не понимаю как RawData = SerialP.ReadLine(); сработал. Ведь если writeline-ы не сработали, значит до трая программа не дошла, ведь не прошло условие SerialP.IsOpen == true | portState == 1. Если оно не прошло, значит порт закрыт.
Все равно я пробовал ставить таймауты(Thread.Sleep)
Пробовал читать посимвольно. Результат тот же.
Пробовал SerialPort.Dispose();
Пробовал много разных проверок и (опять же) обработки исключения
Подскажите пожалуйста что делаю не так

Подскажите нужно ли целиком код опубликовать для решения вопроса. И если да, то каким образом лучше это сделать
  • Вопрос задан
  • 23 просмотра
Подписаться 1 Простой 1 комментарий
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы