2017-03-17 81 views
0

我正在尝试创建一个后台工作器,以获取所有可用WLAN网络的最新RSSI和链接质量。但是,如果我初始化这个后台工作者内的WlanClient,我会得到这个错误信息。WlanClient不更新/无法关闭WlanClient

试图建立会话到网络服务器,但已经建立了该服务器vb.net

但是,如果我创建一个公共类WlanClient过多届,它不会更新RSSI和链接质量值,因为会话保持打开状态并且未关闭。不知道如何关闭会话。但是,这里是我用作后台工作者的代码。

Private Sub Application_Idle(ByVal sender As Object, ByVal e As EventArgs) 
    Try 
     'Dim wlan As New WlanClient() 
     'For Each wlanIface As WlanClient.WlanInterface In wlan.Interfaces 
     For Each wlanIface As WlanClient.WlanInterface In WiFi.client.Interfaces 
      Dim wlanBssEntries As Wlan.WlanBssEntry() = wlanIface.GetNetworkBssList() 

      For Each network As Wlan.WlanBssEntry In wlanBssEntries 
       Dim rss As Integer = network.rssi 
       Dim macAddr As Byte() = network.dot11Bssid 
       tMac = "" 
       For i As Integer = 0 To macAddr.Length - 1 
        If tMac = "" Then 
         tMac += macAddr(i).ToString("x2").PadLeft(2, "0"c).ToUpper() 
        Else 
         tMac += ":" & macAddr(i).ToString("x2").PadLeft(2, "0"c).ToUpper() 
        End If 
       Next 
       Dim ssid As String = Encoding.ASCII.GetString(network.dot11Ssid.SSID, 0, CInt(network.dot11Ssid.SSIDLength)) 

       Dim available As Integer = 0 
       Dim rowindex As Integer = -1 
       For Each row As DataGridViewRow In DataGridView1.Rows 
        If row.Cells(0).Value.ToString().Equals(ssid) AndAlso row.Cells(1).Value.ToString().Equals(tMac) Then 
         available = 1 
         rowindex = row.Index 
         Exit For 
        End If 
       Next 
       If available = 0 Then 
        If Me.IsDisposed = True Then 
         Exit Sub 
        End If 
        DataGridView1.Rows.Add(ssid, tMac, network.dot11BssPhyType, rss, network.linkQuality) 
       Else 
        If DataGridView1.Rows(rowindex).Cells(3).Value <> rss Or DataGridView1.Rows(rowindex).Cells(4).Value <> network.linkQuality Then 
         DataGridView1.Rows(rowindex).Cells(3).Value = rss 
         DataGridView1.Rows(rowindex).Cells(4).Value = network.linkQuality 
        End If 
       End If 
      Next 
     Next 
    Catch ex As Exception 
     MsgBox(ex.Message) 
    End Try 
    Application.DoEvents() 
    Thread.Sleep(100) 
End Sub 

Public Class WiFi 
    Public Shared client As New WlanClient() 
End Class 

请让我知道如何在需要时关闭客户端或处置本地声明的WlanClient。

回答