C # Windows Form - проблема с последовательным портом / BackgroundWorker - PullRequest
0 голосов
/ 29 декабря 2018

Я разработал приложение Windows Form, используя C #, которое получает данные через последовательный порт, отправляемый микроконтроллером.Я получаю данные, используя событие serialPort_DataReceived, в котором я использую ReadLine () для чтения последовательного порта.Затем я использую метод Invoke для вызова функции, которая напечатает полученную строку в textBox.Проблема в том, что приложение не успевает за скоростью, с которой оно получает строки, например, строка, которую я отправляю с микроконтроллера, имеет время, когда оно было отправлено, и хотя оно уже прошло 2 или 3секунд приложение все еще печатает строки, которые были отправлены за 0,2 секунды.И когда я отправляю строку в микроконтроллер, чтобы остановить отправку данных, приложение только перестает печатать данные через некоторое время, то есть оно продолжает печатать значения, хранящиеся в приемном буфере.

Я полагаю, что это происходитучитывая большой объем данных, которые получает приложение, и скорость (я использую скорость 115200 бод), по одной строке на каждую миллисекунду.Это, я думаю, что приложение всегда прерывается событием DataReceived, и оно не успевает распечатать данные и начинает отставать.

Один из способов преодоления этой проблемы был снить, но я не могу понять, как.Я уже попробовал несколько примеров, используя BackgroundWorker, но мне не удалось заставить его работать вообще.Я все еще новичок с точки зрения программирования приложений Windows Form и даже C #.

Кто-нибудь может подтвердить причину проблемы?А как мне сделать поток для распечатки полученных данных?

1 Ответ

0 голосов
/ 29 декабря 2018

Вы можете использовать свойство SerialPort.ReceivedBytesThreshold и метод SerialPort.ReadExisting() (или экземпляр StringBuilder) для обновления пользовательского интерфейса с помощью набора строк сразу, а не одной строки.

Для получения дополнительной информации проверьте:

...