Forum: PC-Programmierung [VB.NET] Alternative zu Thread.Sleep / Task.Delay


von zione (Gast)


Lesenswert?

Hallo,

kurz und sachlich:
 - Compact Framework da Windows Mobile Gerät

Beim klick eines Buttons sollen mehrere Befehle hintereinander 
ausgeführt werden, mit einer Pause von 200 Millisekunden.

Also im ButtonClick Event:
1
Erster Befehl
2
200 ms warten
3
zweiter Befehl
4
200 ms warten
5
etc.

Async / Task.Delay geht da noch nicht. Thread.Sleep blockiert die GUI 
(ist "normal", das weiß ich).

Welche Alternativen gibt es für diesen Fall?

MfG

von Martin S. (sirnails)


Lesenswert?

Na du machst eine schleife, und brichst sie ab, wenn TJetzt-TStart >= 
200ms ist.

Und damit die GUI nicht einfriert, packst du das in einen eigenen Thread 
oder gibst ihr mit DoEvents() Zeit zur Ausführung.

von c-hater (Gast)


Lesenswert?

zione schrieb:

> Welche Alternativen gibt es für diesen Fall?

Ein Windows.Forms.Timer und eine state machine in dessen Tick-Handler. 
Hat den Vorteil, dass GUI-Feedback durch die einzelnen "Kommandos" 
problemlos möglich ist. Ist aber ungünstig, wenn die Kommandos selber 
lange laufen, denn dann blocken sie für ihre Laufzeit den GUI-Thread. 
Wenn das der Fall sein sollte, dann wäre die nächste Variante zu 
bevorzugen:

Ein System.Threading.Timer und eine state machine in dessen 
Timer-Prozedur. GUI-Feedback muss dann aber per System.Form.Invoke oder 
System.Form.BeginInvoke geschehen.

von c-hater (Gast)


Lesenswert?

c-hater schrieb:

> GUI-Feedback muss dann aber per System.Form.Invoke oder
> System.Form.BeginInvoke geschehen.

Muss natürlich richtig heißen: Windows.Form.Invoke bzw. 
Windows.Form.BeginInvoke.

von c-hater (Gast)


Lesenswert?

c-hater schrieb:
> c-hater schrieb:
>
>> GUI-Feedback muss dann aber per System.Form.Invoke oder
>> System.Form.BeginInvoke geschehen.
>
> Muss natürlich richtig heißen: Windows.Form.Invoke bzw.
> Windows.Form.BeginInvoke.

Immer noch nicht richtig, aber jetzt:

Muss natürlich richtig heißen: Windows.Forms.Form.Invoke bzw.
Windows.Forms.Form.BeginInvoke.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.