Timer laufen nicht mehr ...

09/02/2008 - 21:51 von Andreas Ruetten | Report spam
Hallo,

ich bin noch relativ neu bei c#,
und gabe folgendes Problem :


Ich habe ein Programm ,indem ich seriell etwas sende, und etwas
zeitverzögert eine Antwort erhalte.
Bevor ich weitersenden kann , muß ich erst die Antwort abwarten.

und das mach ich so :


Auszug :

timer1.Start();
xTime = 0;
xTicker = 0;

while (xTime < 500) // Timer 1ms Ticker -> max. Wartezeit
{
Thread.Sleep(10); // Rechenzeit freigeben
if (DataReceived == true) // Flag vom Datenempfang
{
DataReceived = false;
break;
}

}

timer1.Stop();




private void timer1_Tick(object sender, EventArgs e)
{
xTime++;
xTicker++;
}





Nur Dummerweise wird xTime nicht erhöht!!!
Das heißt, das Programm belebt immer in der while schleife.
Was kann das verursachen??

Meine Programme werden im Moment von C aus auf c# übertragen.
Vom "Stil " her sind es also eher C Programme.

Andreas
 

Lesen sie die antworten

#1 Frank Dzaebel
09/02/2008 - 23:47 | Warnen spam
Hallo Andreas,

timer1.Start(); [...]
while (xTime < 500)
{
Thread.Sleep(10); // Rechenzeit freigeben
[...]
}



timer1 ist wahrscheinlich ein:
System.Windows.Forms.Timer.
Der Code befindet sich wahrscheinlich in
einer der Form-Methoden - vielleicht Form1_Load(..).

Die befinden sich aber zur Laufzeit (normal) im HauptThread
der App. Durch Thread.Sleep gibts Du Zeit für
*andere* Threads frei, die timer1_Tick-
Methode ist aber auch im HauptThread und
somit blockierst Du sie gleich mit. Rechenzeit
und vor allem Events verarbeiten könntest Du z.B.
mit "Application.DoEvents()". Aber ...

Nimm lieber ein àhnliches Verfahren, wie
etwa hier:

[SerialPort Class (System.IO.Ports)]
http://msdn2.microsoft.com/de-de/li...serialport(en-us).aspx

[C# Tutorials - Serial Port Communication In C#]
http://www.dreamincode.net/forums/s...c35775.htm


ciao Frank
Dipl.Inf. Frank Dzaebel [MCP/MVP C#]
http://Dzaebel.NET

Ähnliche fragen