2013-02-07 85 views
0

我遇到了一個問題,如果我多次運行我的操作,我在同一個項目的ListView中獲得多個條目。VB.net ListView多次添加項目

我正在創建一個簡單的網絡掃描器/主機名抓取器,將項目添加到列表視圖,因爲他們活着回來我的ping測試。

當我第一次運行它時,它運行良好,並創建一個條目,因爲它應該。

當我運行它的後續時間,它創建的項目多次,因爲我已經跑了代碼前。第三次擊打開始時,每創建一次,每次輸入3次。

這是我走按鈕代碼:

Private Sub Go_Click(sender As Object, e As EventArgs) Handles Go.Click 
     Dim verifyIP 
     ListView1.Items.Clear() 
     chkDone = 0 
     verifyIP = ipChk(ipAdd.Text) 
     If verifyIP = 1 Then 
      ipAddy = Split(ipAdd.Text, ".") 
      pingTest1.WorkerReportsProgress = True 
      pingTest1.WorkerSupportsCancellation = False 
      AddHandler pingTest1.ProgressChanged, AddressOf pingTest1_ProgressChanged 
      pingTest1.RunWorkerAsync() 
      pingTest2.WorkerReportsProgress = True 
      pingTest2.WorkerSupportsCancellation = False 
      AddHandler pingTest2.ProgressChanged, AddressOf pingTest2_ProgressChanged 
      pingTest2.RunWorkerAsync() 
      pingTest3.WorkerReportsProgress = True 
      pingTest3.WorkerSupportsCancellation = False 
      AddHandler pingTest3.ProgressChanged, AddressOf pingTest3_ProgressChanged 
      pingTest3.RunWorkerAsync() 
      pingTest4.WorkerReportsProgress = True 
      pingTest4.WorkerSupportsCancellation = False 
      AddHandler pingTest4.ProgressChanged, AddressOf pingTest4_ProgressChanged 
      pingTest4.RunWorkerAsync() 
      While chkDone < 4 
       wait(25) 
      End While 
     Else 
      MsgBox("IP Invalid") 
     End If 
     MsgBox("Done") 
    End Sub 

這裏是後臺工作人員之一,我現在用的是代碼:

Private WithEvents pingTest1 As BackgroundWorker = New BackgroundWorker 

    Private Sub pingTest1_DoWork(ByVal sender As Object, ByVal e As DoWorkEventArgs) Handles pingTest1.DoWork 
     Try 
      Dim hostCheck 
      pingResult1 = 0 
      pingTestDone1 = 0 
      tryIP1 = ipAddy(0) & "." & ipAddy(1) & "." & ipAddy(2) & ".1" 
      If My.Computer.Network.Ping(tryIP1) = True Then 
       'Dim pingsender As New Net.NetworkInformation.Ping 
       'If pingsender.Send(tryIP).Status = Net.NetworkInformation.IPStatus.Success Then 
       Try 
        'Dim host As System.Net.IPHostEntry 
        hostCheck = "" 
        'host = System.Net.Dns.GetHostByAddress(tryIP3) 
        'MsgBox(host.HostName) 
        'host3 = host.HostName 
        'hostCheck = System.Net.Dns.GetHostEntry(tryIP3).HostName 
        hostCheck = System.Net.Dns.GetHostByAddress(tryIP1) 
        'get the hostname property 
        hostCheck = hostCheck.HostName 
        pingTest1.ReportProgress("1", hostCheck) 
       Catch f As Exception 
        'MsgBox("Error: " & f.Message) 
        pingTest1.ReportProgress("1", "No Hostname Found") 
       End Try 
      Else 
       pingResult1 = 2 
      End If 
     Catch d As Exception 
      MsgBox("There was an error trying to ping the IP Address: " & d.Message) 
     End Try 
    End Sub 

    Private Sub pingTest1_ProgressChanged(e.ByVal sender As Object, ByVal e As ProgressChangedEventArgs) 
     MsgBox("Hey") 
     Dim str(2) As String 
     Dim itm As ListViewItem 
     str(0) = tryIP1 & " Is Alive!!!" 
     str(1) = e.UserState 
     itm = New ListViewItem(str) 
     ListView1.Items.Add(itm) 
     str(0) = "" 
     str(1) = "" 
     itm = Nothing 
    End Sub 

Private Sub pingTest1_RunWorkerCompleted(ByVal sender As Object, ByVal e As RunWorkerCompletedEventArgs) Handles pingTest1.RunWorkerCompleted 
    chkDone = chkDone + 1 
End Sub 
  • 我加入了嘿框和足夠的肯定ProgressChanged事件觸發了我點擊Go按鈕的次數。這是我編碼不正確的東西嗎?

回答

1

這很可能是因爲您正在添加,但未刪除處理程序以更改進度,因此您要多次處理該事件。

嘗試在實例化後臺工作人員時添加進度更改事件處理程序,而不是每次單擊按鈕時。這樣他們只會處理一次。

+0

這解決了它,永遠不會想到這一點。非常感激。 – user2048863

+0

沒有問題! – PGallagher