0
我一個問題,我的SerialDataEventHandler,它只是一次,讓我用下面的代碼解釋:我SerialDataEventHandler工作只是一次
public void DataReceivedHandler(object sender, SerialDataReceivedEventArgs e)
{
//init serialport comport
SerialPort comport = (SerialPort)sender;
// Shortened and error checking removed for brevity...
if (!comport.IsOpen) return;
int bytes = comport.BytesToRead;
byte[] buffer = new byte[bytes];
comport.Read(buffer, 0, bytes);
HandleSerialData(buffer, comport);
comport.DataReceived -=
new SerialDataReceivedEventHandler(DataReceivedHandler);
}
public void HandleSerialData(byte[] respBuffer, SerialPort comport)
{
StringBuilder hex = new StringBuilder(respBuffer.Length * 2);
foreach (byte b in respBuffer)
hex.AppendFormat("{0:x2}", b);
string hex2 = hex.ToString();
hex2 = hex2.Substring(22, 8);
Dispatcher.BeginInvoke((Action)(() => { EnOcean_Label.Content = hex2; }));
Dispatcher.BeginInvoke((Action)(() => { EnOcean2_Label.Content = hex2; }));
}
所以,我註冊在DataGrid中我的數據,但它不」在這裏,我唯一的問題是,我的代碼只工作一次,在第一次調用之後它需要「永久」工作,我應該使用什麼函數/方法讓程序從我的SerialPort中獲取新數據。
究竟是什麼讓你決定取消訂閱活動?那hex2.SubString()調用永遠不能正常工作,通常你只能得到1或2個字節。在調試時,似乎可以正常工作,並且通過單步執行使程序故意慢,但在全速運行時不起作用。你必須重新考慮這一點。 –
我的電報每次用戶按下一個物理按鍵時只有24個字節,看不出爲什麼子串是個問題 –
*您通常只有1或2個字節*。不是24.串口實現了一個簡單的字節流,就像TCP一樣,它對「電報」一無所知。你必須數它們自己,將它們存儲在一個字節[]中。而不是調用HandleSerialData(),直到你得到所有的。 –