| |

VB.NET - Ein- und UmsteigerRe: 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 |  |
 | 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 |
  |
|
sevISDN 1.0 
Überwachung aller eingehender Anrufe!
Die DLL erkennt alle über die CAPI-Schnittstelle eingehenden Anrufe und teilt Ihnen sogar mit, aus welchem Ortsbereich der Anruf stammt. Weitere Highlights: Online-Rufident, Erkennung der Anrufbehandlung u.v.m. Weitere InfosTipp des Monats Neu! sevEingabe 3.0 
Einfach stark!
Ein einziges Eingabe-Control für alle benötigten Eingabetypen und -formate, inkl. Kalender-, Taschenrechner und Floskelfunktion, mehrspaltige ComboBox mit DB-Anbindung, ImageComboBox u.v.m. Weitere Infos
|
|
|
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
|
|