2 Timer parallel laufen lassen, in Sub stoppen?

pcarti

Grünschnabel
Hallo

Ich wollte folgendes Programm in Visual Studio 2008 schreiben.

Beim start soll ein Timer einen Countdown von 20min runterzählen. Ist dieser Countdown abgelaufen, werden alle IP-Adressen in einem bestimmten Bereich auf ihre "ping-Antwort" hin überprüft. Wenn alle Adressen nicht erreichbar sind, soll ein weiterer Countdown starten(5 min), nachdem sich der PC automatisch herunterfährt. Diesen Countdown kann man jedoch mit einem Klick auf den Stop-Button abbrechen, woraufhin wieder der Ping-Countdown(20min) von vorne starten soll.

Nun zu meinem Problem. Ich habe gedacht ich mach 2 Subs, einmal pingcountdown und shutdowncountdown, in denen ich die Zeit resette und die timer wieder starte. Bei der Pingüberprüfung soll der pingtimer gestoppt werden, damit er nicht ins negative zählt.

Aber das mit den Subs funktioniert nicht, der stoppt die Timer nicht. Lassen die sich nur mit einem Ereignis stoppen?

Folgenden Code hab ich grad zusammen:

Imports System.Diagnostics
Imports System

Public Class Form1

Dim ausgeschaltet As Integer = 0
Dim letzteadresse As Integer = 1
Dim letztestring As String = ""
Dim aktadresse As String = ""
Dim adressbody As String = "192.168.6."
Dim pingsekunde As Long
Dim shutdownsekunde As Long

Private Sub pingcountdown()
pingsekunde = 1200
TextBox1.Text = pingsekunde
Timer1.Enabled = True
End Sub

Private Sub shutdowncountdown()
shutdownsekunde = 300
Timer2.Enabled = True
End Sub

Private Sub ping()
TextBox1.Text = " "
For i = 1 To letzteadresse
letztestring = i.ToString
aktadresse = adressbody + letztestring

If My.Computer.Network.Ping(aktadresse, 1000) = True Then
pingcountdown()
Else
ausgeschaltet += 1
End If
Next i

If ausgeschaltet = letzteadresse Then
TextBox5.Text = "Automatisches Herunterfahren aktiviert. Zum Beenden auf Stop klicken"
Button1.Enabled = True
shutdowncountdown()
Else

End If
End Sub

Public Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
TextBox5.Text = " "
TextBox2.Text = " "
Timer2.Enabled = False
Button1.Enabled = False
pingcountdown()
End Sub

Public Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
pingsekunde = pingsekunde - 1
TextBox1.Text = pingsekunde
If pingsekunde = 0 Then
Timer1.Enabled = False
ping()
End If
End Sub

Public Sub Timer2_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer2.Tick
shutdownsekunde = shutdownsekunde - 1
TextBox2.Text = shutdownsekunde
If shutdownsekunde = 0 Then
Process.Start("shutdown.exe", "-s -f -t 0")
End If
End Sub

Shared Sub main()
Form1.pingcountdown()
End Sub

Private Sub TextBox5_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TextBox5.TextChanged
Timer1.Enabled = False
End Sub
End Class


Das ist alles was ich bisher habe. Kenn mich noch nicht so dolle in Visual Basic aus, aber ich hatte gedacht, ich würds hinkriegen...

Bitte um Hilfe, wie ich des Problem lösen kann

Danke MfG pcarto
 
Also erst mal verstehe ich nicht ganz was du meinst.
Des Weiteren KANN sich Timer 1 NIEMALS Ausschalten, so wie du es programmiert hast:
Code:
Public Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
    pingsekunde = pingsekunde - 1
     TextBox1.Text = pingsekunde
    If pingsekunde = 0 Then
        Timer1.Enabled = False
        ping()
    End If
End Sub

Wenn also pingsekunde = 0, dann rufst du die Sub ping auf. Was aber passiert in Sub ping? Du aktivierst den Timer wieder, indem du "pingcountdown" aufrufst!
 
Zurück