Alternative für Task.Delay / Thread.Sleep für Compact Framework

  • VB.NET

Es gibt 1 Antwort in diesem Thema. Der letzte Beitrag () ist von Morrison.

    Alternative für Task.Delay / Thread.Sleep für Compact Framework

    Hallo @ Forengemeinde :D habe mich soeben registriert und auch ein Anliegen:

    Ich programmiere mit VS 2008 und Compact Framework, weil die Anwendung auf einem ausgedienten Navi mit Windows CE laufen soll.

    Ich möchte: Eine Sequenz von mehreren Zeichenfolgen per Serial Port an die "Gegenstelle" senden, bis diese einen bestimmten Wert zurück gibt.
    Dies soll automatisch ablaufen, also der Nutzer klickt einen Button, der Port wir geöffnet und dann werden der Reihe nach die Zeichenfolgen rausgeschickt, bis die erwünschte Antwort kommt. Dann wird der Port geschlossen.

    Problem: Wenn ich mit

    VB.NET-Quellcode

    1. ​SerialPort1.write
    nacheinander die Befehle in einen Timer (oder auch direkt in den Button schreibe), werden diese zu schnell hintereinander gesendet, so dass die angeschlossene Gegenstelle sie nicht verarbeiten kann.

    z.B.

    VB.NET-Quellcode

    1. SerialPort1.write ("bla bla1")
    2. SerialPort1.write ("bla bla2")
    3. SerialPort1.write ("bla bla3")

    etc.

    Zwischen den Zeichenfolgen brauche ich eine Pause, ca 200 Millisekunden. In VS 2022 nutze ich ganz einfach Task.Delay (Async), doch das geht beim Compact Framework nicht.

    Threading.Thread.Sleep friert die Oberfläche natürlich ein und das "warten" auf die gewünschte Antwort der Gegenstelle geht dann auch nicht mehr.

    Was gibt es hier für Optionen? Da es insgesamt fast 20 Zeichenfolgen sind, die nacheinander gesendet werden sollen, wäre das mit einzelnen Timern etc. etwas umständlich.

    Erwünscht ist also:

    VB.NET-Quellcode

    1. SerialPort1.write ("bla bla1")
    2. //200 Millisek. warten
    3. SerialPort1.write ("bla bla2")
    4. //200 Millisek. warten
    5. SerialPort1.write ("bla bla3")


    Hat jemand einen Tip, wie sich das so umsetzen lässt ohne Task.Delay und ohne einfrieren der UI?

    Danke im Voraus!
    Hi!

    Du könntest Dir eine Klasse schreiben die Events weitergibt, also wenn Du daten empfangen hast ein Event gefeuert wird.

    Und zu dem Thread.Sleep, da würde ich die Anweisungen in einen separaten Task auslagern, also das der Main-Thread nicht durch das Thread.Sleep beeinflusst wird. Kannst Du auch mit in die Klasse packen.