我家有大約13臺計算機,我希望能夠通過用本地IP ping它們來監視它們。我有一個程序設置爲將ping目標添加到字典中,並且該字典顯示在列表視圖中。vb.net在多個線程上pinging
現在,當我去ping一個IP,使用:
Dim MyPing As New System.Net.NetworkInformation.Ping
Dim Myreply As System.Net.NetworkInformation.PingReply = MyPing.Send("192.168.1.10")
MsgBox(Myreply.RoundtripTime)
它落後於計劃,直到它得到來自IP的響應,或者直到超時。我知道我需要在單獨的線程上ping每個IP來避免這種情況,並使用委託在我的字典中更新結果。我試圖瞭解許多關於使用線程和委託的教程,但我不明白它們是如何工作的,我需要一個非常簡單的例子,它允許我將2個參數傳遞到這個新線程中,並且然後在UI線程上更新我的信息(在我的字典中)。
但是,在嘗試理解線程和代表之後,我在幾個月前從一兩個教程中將它修補到一起,最終放棄了。但是它只允許你傳遞一個參數,而且我不確定當我正在進行線程ping時,它是否會工作。另外,我真的不明白它是如何工作的,並且不能在我的生活中修改它。
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim t1 As New Threading.Thread(AddressOf Count)
t1.IsBackground = True
t1.Start(100)
End Sub
Private Sub Count(ByVal Max As Integer)
For i = 1 To Max
SetLabelText(i.ToString())
Threading.Thread.Sleep(50)
Next
End Sub
Private Sub SetLabelText(ByVal text As String)
If Label1.InvokeRequired Then
Label1.Invoke(New Action(Of String)(AddressOf SetLabelText), text)
Else
Label1.Text = text
End If
End Sub
一對夫婦的事情,我已經看了:
http://www.developerfusion.com/article/5251/delegates-in-vbnet/
http://www.tek-tips.com/faqs.cfm?fid=6036
http://timhastings.co.uk/2011/09/vb-net-using-delegates-for-form-updates-from-worker-threads/
http://www.youtube.com/watch?v=h-DQywCJ_wY
因此,在總結,我需要來ping一個IP在一個單獨的線程上,然後使用ping的結果(IE:超時,往返)更改我的字典中的值。 因爲我需要更新字典,所以我需要將兩個參數傳遞給線程,一個IP和用戶爲該計算機創建的唯一名稱。任何人都可以向我指出正確的方向或提供一個我可以嘗試從中學習的超級簡單例子嗎?
這是有道理的,但你能解釋最後一個子,我不太明白它是如何工作的。 – Postman
這是執行ping操作的線程。把你的一些ip放入並在睡眠中添加一個斷點。看看變量,它應該更有意義。 – dbasnett
對不起,延遲的迴應,但你是對的。我解剖了它並將其合併到我的項目中,現在我明白了,它效果很好。謝謝你,會盡我所能選擇最佳答案。 – Postman