Autor Beitrag
wildcard98
Hält's aus hier
Beiträge: 1



BeitragVerfasst: Di 22.01.08 17:20 
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) :

ausblenden 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)// Answer correct received
                {
                    comlog_textBox.AppendText("Last Answer Size:" + last_answer_size.ToString() + "\r\n");
                    answer_poll_timer.Enabled = false;
                }
                else // Error
                {
                    comlog_textBox.AppendText(test.ToString() + "\r\n"); // Debug Error
                    answer_poll_timer.Enabled = false;
                    return;
                }
            }
            else
            {
                comlog_textBox.AppendText("Timeout\r\n"); // Timeout Ausgabe
            }
        }



Wenn ich nun mit einem Button warten möchte bis eine Antwort empfangen wurde, wartet sich die Funktion tot:

ausblenden 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)
            {

                //offset kurz lesen
               test = com_handle.send_cmd_paras(1new byte[3] { (byte)'c', (byte)'b', (byte)'c' }); // cmd 1 - read offset kurz
               if (test != rm_return.OK) { comlog_textBox.AppendText(test.ToString() + "\r\n"); return; }
              
                
          
                answer_poll_timer.Enabled = true;
                do
                {
                    //comlog_textBox.AppendText("W"); //Debug
                }
                while(answer_poll_timer.Enabled);
                
               offset_kurz_textBox.Text = BitConverter.ToInt16(last_answer, 0).ToString(); // calc short offset

            }
        }


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!
Kha
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 3803
Erhaltene Danke: 176

Arch Linux
Python, C, C++ (vim)
BeitragVerfasst: Di 22.01.08 19:53 
Timer UND Schleife kann schlecht funktionieren. Da die Schleife aber sowieso leer ist, kann du sie ja einfach wegwerfen. Die Zeile darunter musst du dann noch in den Timer-Code einbauen.