Я пытаюсь сделать приложение EEG, оно получает данные из arduino в виде строки и обновляет диаграмму вместе с ней ... У меня проблема в том, что программа на компьютере работает слишком медленно, и он отстает от данных реального времени на Arduino ... код, который я использую для этого:
SerialPort sData = sender as SerialPort;
String recvdata = sData.ReadLine();
//LOG.BeginInvoke((MethodInvoker)delegate { LOG.AppendText("Received: " + recvdata); });
double data;
Double.TryParse(recvdata, out data);
this.Invoke((MethodInvoker)delegate { updatechart(new medicion("asd", tag, data)); });
tag = null;
программа медленная, скорее всего, потому что вызов, я не могу обновить диаграмму с это потому, что он выдает исключение, что программа пытается получить доступ к диаграмме из другого потока.
когда я комментирую таблицу обновлений, программа работает очень быстро ... на другой ноте, я загружаю тесты из .txt файлов, и это происходит очень быстро, потому что у меня нет вызова.
chart1.Series["Series1"].Points.Clear();
//==recorded.Clear(); // borra lo que haya
using (StreamReader sr = File.OpenText(openFileDialog1.FileName))
{
string reading = "";
while ((reading = sr.ReadLine()) != null)
{
string[] datos = reading.Split(',');
double data;
Double.TryParse(datos[0], out data);
updatechart(new medicion(datos[0], datos[1], data));
}
}
У кого-нибудь есть идеи по поводу другого варианта, который я мог бы использовать?
edit: Solved, как сказал Джоэл, я сгруппировал показания в списке и после прочтения нескольких обновил таблицу со всеми из них, сделав меньше вызовов для вызова.
List<medicion> mediciones = new List<medicion>();
SerialPort sData = sender as SerialPort;
String recvdata;
double data;
while (sData.BytesToRead >= 5)
{
recvdata = sData.ReadLine();
if(Double.TryParse(recvdata, out data))
{
mediciones.Add(new medicion(recvdata, tag, data));
tag = null;
}
}
//LOG.BeginInvoke((MethodInvoker)delegate {
LOG.AppendText("Received: " + recvdata); });
this.Invoke((MethodInvoker)delegate { updatechart(mediciones); });
}