Hallo VB'ler,
Ich stehe gerade vor einem Problem und hoffe ihr könnt mir auch dieses mal ein wenig dabei helfen ;-)!
Ich versuche mich gerade ein wenig mit dem Thema Invoke auseinander zu setzten um die bekannten Thread-Übergreifenden Fehler beheben zu können.
Zum besseren lernen habe ich mal ein kleines Test Programm entwickelt und wollte euch fragen, ob ihr mir an Hand dieses Beispiel-Programmes erklären könnt wie das mit dem Invoken genau funktioniert ;-)!
Zeit-Programm:
Am Start wird eine Variable Sekunden = 20 deklariert.
Nach dem Drücken auf den Button1 startet einfach der Timer, der in einem anderen Thread läuft.
Im Timer Elapsed Event soll nun jede Sekunde bei Variable Sekunde -1 gezählt werden, und sobald er die 0 erreicht hat den Timer stopen.
"Mit der Me.CheckForIllegalCrossThreadCalls = False Funktion funktioniert es zwar, aber ist natürlich eine Unsaubere Art wie ich gelesen habe" ;-)! Daher würde ich gerne lernen wie es Richtig geht.
Danke schon einmal im voraus für eure Hilfe!
Ich stehe gerade vor einem Problem und hoffe ihr könnt mir auch dieses mal ein wenig dabei helfen ;-)!
Ich versuche mich gerade ein wenig mit dem Thema Invoke auseinander zu setzten um die bekannten Thread-Übergreifenden Fehler beheben zu können.
Zum besseren lernen habe ich mal ein kleines Test Programm entwickelt und wollte euch fragen, ob ihr mir an Hand dieses Beispiel-Programmes erklären könnt wie das mit dem Invoken genau funktioniert ;-)!
Zeit-Programm:
Am Start wird eine Variable Sekunden = 20 deklariert.
Nach dem Drücken auf den Button1 startet einfach der Timer, der in einem anderen Thread läuft.
Im Timer Elapsed Event soll nun jede Sekunde bei Variable Sekunde -1 gezählt werden, und sobald er die 0 erreicht hat den Timer stopen.
"Mit der Me.CheckForIllegalCrossThreadCalls = False Funktion funktioniert es zwar, aber ist natürlich eine Unsaubere Art wie ich gelesen habe" ;-)! Daher würde ich gerne lernen wie es Richtig geht.
VB.NET-Quellcode
- Public Class Form1
- Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
- '-- Variablen Deklaration --'
- Dim Sekunden As Integer = 20
- ' Me.CheckForIllegalCrossThreadCalls = False
- End Sub
- '-- erstellen des Timers --'
- Private Sub CreateTimer()
- Dim Timer1 As New System.Timers.Timer
- Timer1.Interval = 1000
- Timer1.Enabled = True
- AddHandler Timer1.Elapsed, New System.Timers.ElapsedEventHandler(AddressOf Me.Timer1_Elapsed)
- End Sub
- '-- Start Button wird geklickt --'
- Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
- CreateTimer()
- Timer1.Start()
- Button1.Enabled = False
- Button1.Text = "Timer läuft"
- Label1.Visible = True
- Button2.Visible = True
- End Sub
- '-- Timer Prozess beginnt --'
- Private Sub Timer1_Elapsed(ByVal sender As System.Object, ByVal e As System.Timers.ElapsedEventArgs)
- If Sekunden = 0 Then
- Button1.Enabled = True
- Button1.Text = "Timer starten"
- Label1.Visible = False
- Dim Sekunden As Integer = 20
- Button2.Visible = False
- Timer1.Stop()
- Else
- Sekunden = Sekunden - 1
- Dim sekundenanzeige As String = Sekunden
- Label1.Text = "noch " + sekundenanzeige + "s..."
- End If
- End Sub
- '-- Stop Button wird geklickt --'
- Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
- Timer1.Stop()
- Sekunden = 20
- Button1.Enabled = True
- Button1.Text = "Timer starten"
- Label1.Visible = False
- End Sub
- End Class
Danke schon einmal im voraus für eure Hilfe!