Я читаю данные из последовательного порта. Данные выводятся из шкалы. Теперь я использую Readline()
и получаю данные даже после удаления DiscardInBuffer()
.
Каков правильный способ чтения данных из последовательного порта? В Интернете так мало примеров, что я чувствую, что это какой-то святой Грааль, который никто не понял.
Любая помощь, пожалуйста?
Кажется, что последовательный порт - это капризный ребенок.
С#, WinCE 5.0, тонкий клиент HP, Compact framework 2.0
private void WeighSample()
{
this._processingDone = false;
this._workerThread = new Thread(CaptureWeight);
this._workerThread.IsBackground = true;
this._workerThread.Start();
} //end of WeighSample()
private void CaptureWeight()
{
globalCounter++;
string value = "";
while (!this._processingDone)
{
try
{
value = this._sp.ReadLine();
if (value != "")
{
if (value == "ES")
{
_sp.DiscardInBuffer();
value = "";
}
else
{
this.Invoke(this.OnDataAcquiredEvent, new object[] { value });
}
}
}
catch (TimeoutException)
{
//catch it but do nothing
}
catch
{
//reset the port here?
MessageBox.Show("some other than timeout exception thrown while reading serial port");
}
}
} //end of CaptureWeight()
Одно замечание о моем приложении заключается в том, что я запускаю поток (weightSample), когда курсор перескакивает на текстовое поле. Причина этого в том, что вес также можно ввести вручную (часть запроса). Поэтому я не знаю заранее, будет ли пользователь нажимать PRINT на весы или набирать вес. В любом случае после получения данных я выхожу из рабочего потока. Также обратите внимание, что я не использую событие последовательного порта DataReceived, так как мне сказали, что он не надежный.
Любые комментарии/идеи приветствуются. Это мой первый опыт работы с последовательными портами.