Un_NaMeD Ответов: 1

Последовательный порт.DataReceived Логики Выполнения Мероприятия


Всем привет.

У меня есть к вам вопрос.

Мне интересно, что событие DataReceived возникает автоматически whenever приходят данные из последовательный порт? Я читал, но не смог найти здесь информацию:

http://msdn.microsoft.com/en-us/library/system.io.ports.serialport.datareceived.aspx[^]

Я написал небольшую программу для чтения данных каждые 3 секунды из последовательного порта, но это не очень хорошо работает.

Код приведен ниже:

string buffer;

SerialPort sp = new SerialPort("COM1");

sp.BaudRate = 9600;
sp.Handshake = Handshake.None;

// Handler
sp.DataReceived += new SerialDataReceivedEventHandler(DataReceivedHandler);

private void serialPort1_DataReceived(object sender, System.IO.Ports.SerialDataReceivedEventArgs e)
{
    buffer= sp.ReadExisting();
}

Я не хочу использовать таймер, потому что данные не всегда поступают с интервалом в 3 секунды. Поэтому я не могу получить точные данные.

Я знаю, что это простой вопрос, но я застрял...
Есть идеи, как читать с интервалами?
С наилучшими пожеланиями...

1 Ответов

Рейтинг:
1

OriginalGriff

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

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