我想創建一個程序,它會根據「實時」接收到的數據以任何方式對橢圓進行着色。數據是這樣的: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
將從indata
中提取單個x1-1
,這在接收數據期間仍然在增長。我知道它不會像它應該那樣工作,但現在並不重要。行動按鈕
代碼:
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(的TestString);' –
第一次迭代是空的,但那麼它通常看起來像'x1-1','x2-1' – Vades
如果你把一個斷點在你的「如果'語句,teststring是否等於'x1-1'?如果是這樣,你的UI線程永遠不會得到重繪的機會,因爲你正在做'while(true)'......你在錘擊CPU。它對你自己來說 - 打開任務管理器,看看內核是否達到100%,考慮在每300-500ms執行一次的計時器上更新UI,這將給UI線程做好工作的機會 –