Hallo,
ich benutze einen Timer um in regelmässigen Abständen auf der seriellen Schnittstelle zu schauen, ob ein Byte empfangbar ist (die kommunikation ist aber nicht mein Problem, die funktioniert) :
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25:
| private void answer_poll_timer_Tick(object sender, EventArgs e) { rm_return test; test = com_handle.get_answer(ref last_answer, ref last_answer_size);
if (test != rm_return.ANSWER_TIMEOUT) { if (test == rm_return.OK) { comlog_textBox.AppendText("Last Answer Size:" + last_answer_size.ToString() + "\r\n"); answer_poll_timer.Enabled = false; } else { comlog_textBox.AppendText(test.ToString() + "\r\n"); answer_poll_timer.Enabled = false; return; } } else { comlog_textBox.AppendText("Timeout\r\n"); } } |
Wenn ich nun mit einem Button warten möchte bis eine Antwort empfangen wurde, wartet sich die Funktion tot:
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23:
| private void button3_Click(object sender, EventArgs e) { rm_return test; if (com_handle.cport_open) {
test = com_handle.send_cmd_paras(1, new byte[3] { (byte)'c', (byte)'b', (byte)'c' }); if (test != rm_return.OK) { comlog_textBox.AppendText(test.ToString() + "\r\n"); return; } answer_poll_timer.Enabled = true; do { } while(answer_poll_timer.Enabled); offset_kurz_textBox.Text = BitConverter.ToInt16(last_answer, 0).ToString(); } } |
Leider wird der Timer bei einer Betätigung des Buttons (laut Debugger) gar nicht gestartet, und daher wird "while(answer_poll_timer.Enabled)" nicht verlassen.
Auch gibt der TimerTick nichts vonsich (weder eine Timeout,Error noch OK Information), es scheint als würde der Timer garnicht gestartet werden...
Vielen Dank schonmal für eure Hilfe!