我使用VB.net創建監控系統。如果設備關閉,我希望系統發送電子郵件,並在設備重新聯機時再次發送電子郵件。我使用Ping來監視設備。設備的IP地址已保存並將顯示在lvi.SubItems(5).Text
中。如果ping失敗,請發送一次郵件
使用以下代碼,如果設備ping失敗,則始終發送電子郵件。如果ping失敗,我只想發送一次電子郵件。你能幫我解決這個問題嗎?
Private Sub Ping_LV()
For Each lvi As ListViewItem In LV_Monitoring.Items
Dim p As New Ping
AddHandler p.PingCompleted, AddressOf p_PingCompleted
p.SendAsync(lvi.SubItems(5).Text, lvi)
Next
End Sub
Private Sub p_PingCompleted(ByVal sender As Object, ByVal e As System.Net.NetworkInformation.PingCompletedEventArgs)
Dim p As Ping = DirectCast(sender, Ping)
Dim lvi As ListViewItem = DirectCast(e.UserState, ListViewItem)
If e.Reply.Status = IPStatus.Success Then
Console.WriteLine("Ping Success")
lvi.SubItems(6).Text = "UP"
lvi.UseItemStyleForSubItems = False
lvi.SubItems(6).ForeColor = Color.White
lvi.SubItems(6).BackColor = Color.Green
Else
Console.WriteLine("Ping Failed")
lvi.SubItems(6).Text = "DOWN"
lvi.UseItemStyleForSubItems = False
lvi.SubItems(6).ForeColor = Color.White
lvi.SubItems(6).BackColor = Color.Red
Sent_Email()
End If
RemoveHandler p.PingCompleted, AddressOf p_PingCompleted
p.Dispose()
LV_Monitoring.Refresh()
End Sub
Private Sub Timer_Tick(sender As Object, e As EventArgs) Handles Timer.Tick
Ping_LV()
End Sub
Private Sub Form_Monitoring_Devices_Load(sender As Object, e As EventArgs) Handles MyBase.Load
Timer.Start()
End Sub
你可以測試當前'這個項目,只有Text'如果它不是「DOWN」,則發送通知。我可能寧願使用一個專用的布爾標誌,儘管您可以將其存儲在項目的「標籤」中。 – jmcilhinney
我不太明白,你想告訴我一個示例代碼的情況。 –