Moin moin
Ich hatte eine Übungsaufgabe.
Erstellen eines FlipFlop. Ich habe nun zwei Lösungen erstellt.
Lösung 1: Mittels Timer und TimerTick
Lösung 2: Mittels ThreadSleep
Das mit dem Timer ging recht flott aber beim ThreadSleep habe ich lange gebraucht. Erst ging immer nur ein Status / Zustand, dann hing das Programm. Dabei kam ich dann auf die Idee mit dem
Jetzt meine Frage:
Warum läuft das mit dem Timer so durch und mit dem ThreadSleep nur in einem Async-Modus?
Was kann man ggf an dem Code verbessern?
Spoiler anzeigen
Ich hatte eine Übungsaufgabe.
Erstellen eines FlipFlop. Ich habe nun zwei Lösungen erstellt.
Lösung 1: Mittels Timer und TimerTick
Lösung 2: Mittels ThreadSleep
Das mit dem Timer ging recht flott aber beim ThreadSleep habe ich lange gebraucht. Erst ging immer nur ein Status / Zustand, dann hing das Programm. Dabei kam ich dann auf die Idee mit dem
Async
.Jetzt meine Frage:
Warum läuft das mit dem Timer so durch und mit dem ThreadSleep nur in einem Async-Modus?
Was kann man ggf an dem Code verbessern?
VB.NET-Quellcode
- Public Class frm_flipflop
- Dim flipflop As Boolean = False
- Dim flipflop2 As Boolean = False
- Dim abort As Boolean
- Dim flop As Boolean
- Private Sub frm_flipflop_Load(sender As Object, e As EventArgs) Handles MyBase.Load
- on_off(False) : settings()
- End Sub
- Private Sub settings()
- Timer1.Stop() : Timer1.Interval = 300
- pn_red.BackColor = Color.Red : pn_green.BackColor = Color.Green
- pn_red.Visible = False : pn_green.Visible = False
- lbl_tith.Text = "FilpFlop via TimerTick"
- End Sub
- Private Sub btn_onoff_Click(sender As Object, e As EventArgs) Handles btn_onoff.Click
- flipflop = Not flipflop
- on_off(flipflop)
- End Sub
- Private Sub on_off(ByVal flipflop As Boolean)
- If flipflop = True Then
- lbl_onoff.Text = "FlipFlop Ein"
- btn_onoff.BackColor = Color.Red
- Chb.Enabled = False
- abort = False
- If Chb.Checked = True Then
- flippAsync()
- Else
- Timer1.Start()
- End If
- Else
- abort = True
- lbl_onoff.Text = "FlipFlop Aus"
- btn_onoff.BackColor = Color.Green
- Chb.Enabled = True
- settings()
- End If
- End Sub
- Private Sub Timer1_Tick(sender As Object, e As EventArgs) Handles Timer1.Tick
- flipflop2 = Not flipflop2
- If flipflop2 Then pn_red.Visible = True Else pn_red.Visible = False
- If flipflop2 Then pn_green.Visible = False Else pn_green.Visible = True
- End Sub
- Private Async Sub flippAsync()
- Await Threading.Tasks.Task.Run(Sub() display(True))
- abort = False
- settings()
- End Sub
- Private Sub display(ByVal flop As Boolean)
- If abort Then Exit Sub
- Threading.Thread.Sleep(500)
- If flop Then Me.BeginInvoke(Sub() pn_red.Visible = True) Else Me.BeginInvoke(Sub() pn_red.Visible = False)
- If flop Then Me.BeginInvoke(Sub() pn_green.Visible = False) Else Me.BeginInvoke(Sub() pn_green.Visible = True)
- flop = Not flop
- display(flop)
- End Sub
- Private Sub Chb_CheckedChanged(sender As Object, e As EventArgs) Handles Chb.CheckedChanged
- If Chb.Checked Then lbl_tith.Text = "FilpFlop via ThreadingThread" Else lbl_tith.Text = "FilpFlop via TimerTick"
- End Sub
- End Class
Asperger Autistin. Brauche immer etwas um gewisse Sachen zu verstehen.