Чтение System.Threading.Timer и SerialPort - PullRequest
1 голос
/ 09 марта 2011

Мое приложение читает каждые x мс некоторые данные из последовательного порта (MyDataReader) и отображает их в элементе управления. MyDataReader также может быть файлом, из которого я могу читать данные.

Я использовал простой таймер, каждый тик я считывал данные из последовательного порта / файла, обрабатывал их и отображал, они отлично работали.

Теперь я добавил другое устройство, с которого мне нужно читать данные, и я переключился на System.Threading.Timer, но теперь моя функция «галочка» не работает должным образом, когда она читает из последовательного порта, я получить нули. когда я вхожу в режим отладки и функцию точки останова ReadFromSerialPort (), иногда я получаю действительные данные, иногда нет.

Если я переключаю чтение с последовательного порта на чтение из файла, оно работает нормально, я вызываю все элементы управления, отображающие данные.

Я заблокировал чтение / запись из последовательного порта:

lock(this)
{
    writetoserialport;
    readfromserialport;
}

У кого-нибудь есть идеи, почему я получаю нули все время, а когда я брепаюсь, у меня иногда есть данные? Это как будто он открывает чтение из последовательного порта в другом потоке, и мне нужно ждать, пока данные будут прочитаны.

Спасибо.

Ответы [ 2 ]

1 голос
/ 09 марта 2011

Ну, последовательный порт не совпадает с файлом.

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

Таким образом, вы должны захватывать данные с последовательного порта и сохранять их в буфере. Затем таймер получит данные из вашего буфера.

Если это не ваша проблема, сообщите нам больше.

0 голосов
/ 09 марта 2011

Чтение для последовательного порта не является детерминированным.В тот момент, когда вы выполняете функцию чтения, в порту могут отсутствовать данные.Проверяете ли вы, есть ли данные, которые нужно прочитать, прежде чем выполнять функцию чтения?

В случае установки точки останова из-за различий в скорости отладки вы иногда видите данные.

...