Я хочу создать программу, которая будет цветовым эллипсом каким-либо образом в зависимости от полученных данных в режиме реального времени. Данные похожи на: x1-1
, x2-1
и т. Д.Выполнение чего-то во время приема данных из последовательного порта в WPF
У меня есть странная проблема, я вижу, что при отладке, цвет заполнения эллипса должен меняться, но этого не происходит.
часть моего кода с получением данных:
private void ReceiveData()
{
SerialPort serialPort = new SerialPort("COM1", 9600);
serialPort.DataReceived += new SerialDataReceivedEventHandler(DataReceivedHandler);
serialPort.Open();
}
private static void DataReceivedHandler(
object sender,
SerialDataReceivedEventArgs e)
{
SerialPort sp = (SerialPort)sender;
string indata = sp.ReadExisting();
if (indata.Contains(" "))
{
testString = indata.Substring(0, 4);
}
Console.Write(indata);
}
Я могу видеть полученные данные в консоли, даже после щелчка на кнопке, которая начинает прием данных. testString
должен извлечь один x1-1
от indata
, который все еще растет во время приема данных. Я знаю, что это не работает, как должно, но теперь это не имеет значения.
Код действия на кнопке:
private void button1_Click(object sender, RoutedEventArgs e)
{
ReceiveData();
while (true)
{
if (testString == "x1-1") x1.Fill = Brushes.Blue;
else x1.Fill = Brushes.Red;
}
}
x1
является эллипсом, что я хочу сделать красным или синим. Я могу установить точку останова в этой функции, и я вижу, что она должна измениться. Я думаю, проблема в том, что программа ждет закрытия порта и завершения передачи, а затем, возможно, это изменится, но мне нужно иметь его в режиме реального времени. Кто-нибудь знает, как это сделать?
Покажите нам 'Console.Write (СравниваемаяСтрока);' –
Первая итерация пуста, но тогда это выглядит нормально, как 'x1-1',' x2-1' – Vades
И если поставить бряк на свой " if ', имеет ли teststring когда-либо равную «x1-1»? Если это так, ваш поток пользовательского интерфейса никогда не получает возможность перерисовывать, потому что вы выполняете 'while (true)' ... вы забиваете процессор. это для себя - откройте диспетчер задач и посмотрите, не скапливается ли ядро на 100%. Подумайте об обновлении пользовательского интерфейса по таймеру, который выполняется каждые 300-500 мсек. Это даст потоку пользовательского интерфейса возможность выполнить свою работу. –