VB.netを使用して監視システムを作成しています。私は、デバイスがダウンしている場合は、電子メールを送信し、そのデバイスがオンラインに戻った場合に再度電子メールを送信するようにします。私はPingを使ってデバイスを監視しています。デバイスのIPアドレスは既に保存されており、lvi.SubItems(5).Text
に表示されます。pingが失敗した場合に一度だけ電子メールを送信します。
次のコードでは、デバイスのpingが失敗した場合に電子メールが常に送信されます。 pingが失敗した場合、電子メールを1回送信するだけです。問題を解決するのを助けてくれますか?
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'に格納することができます。 – jmcilhinney
私はそのことを理解していません。その場合のサンプルコードを表示したいと思いますか? –