Schleife nach 2 sek verlassen

15/02/2008 - 15:39 von Rainer | Report spam
Hallo Gemeinde,

ich möchte eine Schleife, bei der ich Gefahr laufe , dass sie endlos wird,
nach 2 Sek verlassen.


Die Schleife hat den Zweck, den Programmablauf solange zuverzögern, bis ein
Messgeràt 22 Bytes in den seriellen Port gelegt hat.
Erst wenn die erwarterten 22 Bytes vorhanden sind, soll das Programm
weiterlaufen.

Aber nicht immer ist auf das Messgeràt verlass und es werden zuwenige Bytes
an
den port gesendet, dann landet das Programm in einer endlos Schleife, was zu
vermeiden ist


hier ein snipped


while (port.BytesToRead < 22)
{
// do something
// break nach 2 sek auslösen
}


Hintergrund , die Anzahl der Byte erreichen im auszulesenden Port nicht
immer 22
Wie stelle ich das an, zb mit Verwendung einens Timers

Vieln Dank für jede kompetente Hilfe

Rainer
 

Lesen sie die antworten

#1 Frank Dzaebel
15/02/2008 - 17:03 | Warnen spam
Hallo Rainer,

ich möchte eine Schleife, bei der ich Gefahr laufe , dass sie endlos wird,
nach 2 Sek verlassen.
Die Schleife hat den Zweck, den Programmablauf solange zuverzögern, bis
ein
Messgeràt 22 Bytes in den seriellen Port gelegt hat.
Erst wenn die erwarterten 22 Bytes vorhanden sind, soll das Programm
weiterlaufen.



Hmm, Du meinst SerialPort (RS-232 Serial COM Port)?

[SerialPort (RS-232 Serial COM Port) in C# .NET - #region Coad's Code]
http://msmvps.com/blogs/coad/archiv...39466.aspx

Würde man eigentlich über das:

[SerialPort.DataReceived-Ereignis (System.IO.Ports)]
http://msdn2.microsoft.com/de-de/li...tareceived(VS.80).aspx

implementieren. Beachte, dass Du da nicht im Haupt-Thread
bist, also der Versuch, UI-Elemente im Hauptthread zu
àndern, eine Threadausnahme auslösen würde. Lösung etwa:

[Bearbeiten von Steuerelementen aus Threads]
http://dzaebel.net/ControlInvoke.htm

Ansonsten gàbe es für solche simplen Schleifen
über Threads vielerlei Methoden, hier einige Beispiel:

[C# Tipps, Teil 1 - Threads, Prozesse und Synchronisierung]
http://msdn2.microsoft.com/de-de/li...spx#ID0ELH

Du musst ja bedenken, das z.B. in einer Windows Forms-
Anwendung, ansonsten die Anwendung blockieren würde.
Im einfachsten Fall wàre evtl. ein Application.DoEvents()
in der Schleife ausreichend.


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

Ähnliche fragen