【发布时间】:2017-05-09 00:08:58
【问题描述】:
我正在使用 VB.net 创建一个监控系统。我希望系统在设备出现故障时发送电子邮件,并在该设备恢复在线时再次发送电子邮件。我使用 Ping 来监控设备。设备的 IP 地址已保存,将显示在lvi.SubItems(5).Text 中。
使用以下代码,如果设备 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”时才发送通知。不过,我可能更愿意使用专用的布尔标志,您可以将其存储在项目的Tag中。 -
我不太明白,你想给我看一下那个案例的示例代码吗?
标签: vb.net email monitoring ping