vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
vb@rchiv Offline-Reader - exklusiv auf der vb@rchiv CD Vol.4  
 vb@rchiv Quick-Search: Suche startenErweiterte Suche starten   Impressum  | Datenschutz  | vb@rchiv CD Vol.6  | Shop Copyright ©2000-2025
 
zurück

 Sie sind aktuell nicht angemeldet.Funktionen: Einloggen  |  Neu registrieren  |  Suchen

VB.NET - Ein- und Umsteiger
Re: alle 30 Sekunden Pingen 
Autor: Maas
Datum: 06.12.11 01:03

Du musst im DoWork-Sub die e.Cancel-Property abfragen und ggf. aussteigen.
    Private mPing As String = String.Empty
 
    Private Sub TextBox1_TextChanged(sender As System.Object, e As _
      System.EventArgs) Handles TextBox1.TextChanged
        mPing = CType(sender, TextBox).Text
    End Sub
 
    Private Sub CheckBox1_CheckedChanged(sender As System.Object, e As _
      System.EventArgs) Handles CheckBox1.CheckedChanged
        Dim chkd = CType(sender, CheckBox).Checked
        If Not mBGW.IsBusy And chkd Then
            mBGW.RunWorkerAsync()
        ElseIf mBGW.IsBusy And Not chkd Then
            mBGW.CancelAsync()
        End If
    End Sub
 
    Private WithEvents mBGW As New System.ComponentModel.BackgroundWorker With _
      {.WorkerSupportsCancellation = True}
 
    Private Sub BackgroundWorker1_DoWork1(ByVal sender As Object, ByVal e As _
      System.ComponentModel.DoWorkEventArgs) Handles mBGW.DoWork
        Do Until e.Cancel
            Dim result As Boolean = My.Computer.Network.Ping(mPing)
            Debug.WriteLine(String.Format("{0}: {1} - {2}", Date.Now, mPing, _
              result))
            System.Threading.Thread.Sleep(1000 * 3)
        Loop
    End Sub
In deinem Fall bietet sich aber auch der asynchrone System.Timers.Timer an (der System.Windows.Forms.Timer ist nicht asynchron):
    Private WithEvents mTimer As New Timers.Timer With {.Interval = 3000}
    Private Delegate Sub AddToTextBoxDelegate(txt As String)
 
    Private Sub CheckBox1_CheckedChanged(sender As System.Object, e As _
      System.EventArgs) Handles CheckBox1.CheckedChanged
        Dim chkd As Boolean = CType(sender, CheckBox).Checked
        mTimer.Enabled = chkd
    End Sub
 
    Private Sub mTimer_Elapsed(sender As Object, e As Timers.ElapsedEventArgs) _
      Handles mTimer.Elapsed
        If My.Computer.Network.Ping(mPing) Then
            Me.AddToTextBox(Date.Now & " Die IP Adresse: " & mPing & " war" & _
              "verfügbar")
        Else
            Me.AddToTextBox(Date.Now & " Die IP Adresse: " & mPing & " war" & _
              "nicht verfügbar")
        End If
    End Sub
 
    Private Sub AddToTextBox(txt As String)
        If Me.InvokeRequired Then
            Me.Invoke(New AddToTextBoxDelegate(AddressOf Me.AddToTextBox), txt)
        Else
            Me.TextBox2.Text &= txt & vbCrLf
        End If
    End Sub
Wenn du asynchron auf Controls zugreifen willst (hier eine TextBox anstatt deiner LogFile), musst du .Invoke von irgendeinem Control benutzen. Mit .InvokeRequired kannst du prüfen, ob ein .Invoke notwendig ist. Ich habe hier als Control die Form genutzt, aber es geht auch jedes andere Control. Das macht keinen Unterschied.

Bei beiden Möglichkeiten gibt es ein unterschiedliches Verhalten, beim Abbrechen und Starten innerhalb der Rundenzeit. Der Timer würde sofort wieder starten. Der BGW würde einfach weiterlaufen, also die Restzeit noch warten. Den BGW interessiert es somit nicht ob du kurz auf Cancel und dann gleich wieder auf Start klickst, also Off/On in z.B. einer Sekunde.

Maas
alle Nachrichten anzeigenGesamtübersicht  |  Zum Thema  |  Suchen

 ThemaViews  AutorDatum
alle 30 Sekunden Pingen2.158besserpunk1104.12.11 16:36
Re: alle 30 Sekunden Pingen1.770Maas04.12.11 16:42
Re: alle 30 Sekunden Pingen1.763besserpunk1105.12.11 21:35
Re: alle 30 Sekunden Pingen1.822besserpunk1105.12.11 22:50
Re: alle 30 Sekunden Pingen1.792Maas06.12.11 01:03

Sie sind nicht angemeldet!
Um auf diesen Beitrag zu antworten oder neue Beiträge schreiben zu können, müssen Sie sich zunächst anmelden.

Einloggen  |  Neu registrieren

Funktionen:  Zum Thema  |  GesamtübersichtSuchen 

nach obenzurück
 
   

Copyright ©2000-2025 vb@rchiv Dieter Otter
Alle Rechte vorbehalten.
Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein.

Diese Seiten wurden optimiert für eine Bildschirmauflösung von mind. 1280x1024 Pixel