vb.net和后台工作人员问题 [英] vb.net and back ground workers issues

查看:64
本文介绍了vb.net和后台工作人员问题的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我是vb.net的新手,并且我一直在研究此应用程序,以在我们的网络中获取远程计算机的信息.在使用后勤人员之前,我的代码工作正常.现在,当它运行时,它会提取信息,但是当我重置字段时,在当前用户,内存和硬盘驱动器大小中,它会清除它,但随后会返回新信息并紧随其后是旧信息.它喜欢它的旧数据,并且不会释放它.我尝试使用dispose命令,甚至每次运行时都创建一个新工作器.任何帮助将是巨大的.

如果我在后台工作人员外部拥有代码,则该代码有效,但是当我这样做时,它将锁定应用程序,直到完成提取信息为止.

抱歉,冗长的代码,但是我想确保您可以看到我在代码方面的明智选择.

I m new to vb.net and i have been working on this application to get remote machines infomration in our network. I had the code working fine till i used a back ground worker. now when it runs it pulls information but in the current user, ram, and harddrive size when i reset the fields it clears it but then comes back with the new information and the old right next to it. Its like its olding data and wont relsease it. I have tried using the dispose command and even having it create a new worker everytime it runs. Any help would be great.

The code works if i have it outside of the background worker but when i do that it locks the application up till its done pulling the information.

Sorry for the long code but i wanted to make sure you could see what i was working with code wise.

Public OSNAME As String
Public SERVICEPACK As String
Public IMAGEDATE As String
Public LASTREBOOT As String
Public PAGEFILE As String
Public DOMAINRESULT As String
Public PCMODEL As String
Public RAMTOTAL As String
Public LOGGEDINUSER As String
Public FREEDRIVESPACE As String
Public EXTDRIVE1 As String
Public EXTDRIVE2 As String
Public EXTDRIVE3 As String
Public IPADDRESS As String
Public MACADDRESS As String
Public DNSRESULT As String
Public TIMEZONE1 As String
Public VIDEORES As String
Private Sub BackgroundWorkerMachineInfo_DoWork(sender As System.Object, e As System.ComponentModel.DoWorkEventArgs) Handles BackgroundWorkerMachineInfo.DoWork
    Dim MyObjSearcher As System.Management.ManagementObjectSearcher
    Dim MyColl As System.Management.ManagementObjectCollection
    Dim MyObj As System.Management.ManagementObject
        Dim MyConOptions As New System.Management.ConnectionOptions
        With MyConOptions
            .Impersonation = System.Management.ImpersonationLevel.Impersonate
            ' This entry required for Windows XP and newer
            .Authentication = System.Management.AuthenticationLevel.Packet
        End With
        ' Connect to WMI namespace
        Dim MyMgtScope As System.Management.ManagementScope
        MyMgtScope = New System.Management.ManagementScope("\\" & strComputer & "\root\cimv2", MyConOptions)
        MyMgtScope.Connect()
        If MyMgtScope.IsConnected = False Then
            ' Error connecting to computer
            Exit Sub
        End If
    '----------------------------------------------------------------------------
    'Basic machine INnformation for the left column
    '----------------------------------------------------------------------------
        Try
            ' Get data from  Win32_OperatingSystem WMI
            MyObjSearcher = New System.Management.ManagementObjectSearcher(MyMgtScope.Path.ToString, _
                    "Select * FROM Win32_OperatingSystem")
            ' Execute the query
            MyColl = MyObjSearcher.Get
        For Each MyObj In MyColl
            OSNAME += (MyObj("caption").ToString())
            If OSNAME = "Microsoft Windows 7 Enterprise " Then
                OSNAME = "Windows 7"
                WIN7_UNC_Users.Visibility = ElementVisibility.Visible
                UNC_CDRIVE.Visibility = ElementVisibility.Visible
                UNC_HostFile.Visibility = ElementVisibility.Visible
                UNC_RoamingProfile.Visibility = ElementVisibility.Visible
                WIN7_UNC_Zservice.Visibility = ElementVisibility.Visible
                UNC_Temp.Visibility = ElementVisibility.Visible
                WINXP_UNC_DDRIVE.Visibility = ElementVisibility.Collapsed
                WINXP_UNC_Users.Visibility = ElementVisibility.Collapsed
                WINXP_UNC_Zservice.Visibility = ElementVisibility.Collapsed
            End If
            If OSNAME = "Microsoft Windows XP Professional" Then
                OSNAME = "Windows XP"
                WIN7_UNC_Users.Visibility = ElementVisibility.Collapsed
                UNC_CDRIVE.Visibility = ElementVisibility.Visible
                UNC_HostFile.Visibility = ElementVisibility.Visible
                UNC_RoamingProfile.Visibility = ElementVisibility.Visible
                WIN7_UNC_Zservice.Visibility = ElementVisibility.Collapsed
                UNC_Temp.Visibility = ElementVisibility.Visible
                WINXP_UNC_DDRIVE.Visibility = ElementVisibility.Visible
                WINXP_UNC_Users.Visibility = ElementVisibility.Visible
                WINXP_UNC_Zservice.Visibility = ElementVisibility.Visible
                RDC_Button_Header.Visibility = ElementVisibility.Collapsed
            End If
        Next

    Catch ex As Exception
        'An error occured getting data, display what we did get
        OSNAME = "UnKnown"
    End Try
    Try
        ' Get data from  Win32_OperatingSystem WMI
        MyObjSearcher = New System.Management.ManagementObjectSearcher(MyMgtScope.Path.ToString, _
                "Select * FROM Win32_OperatingSystem")
        ' Execute the query
        MyColl = MyObjSearcher.Get
        For Each MyObj In MyColl
            SERVICEPACK = (MyObj("servicepackmajorversion").ToString())
            IMAGEDATE = ManagementDateTimeConverter.ToDateTime(CStr(MyObj("InstallDate")))
            LASTREBOOT = ManagementDateTimeConverter.ToDateTime(CStr(MyObj("LastBootUpTime")))
        Next
    Catch ex As Exception
        'An error occured getting data, display what we did get
        SERVICEPACK = "Unavailable"
        IMAGEDATE = "Unavailable"
        LASTREBOOT = "Unavailable"
    End Try
    Try
        ' Get data from  Win32_PageFileUsage WMI
        MyObjSearcher = New System.Management.ManagementObjectSearcher(MyMgtScope.Path.ToString, _
                "Select * FROM Win32_PageFileUsage")
        ' Execute the query
        MyColl = MyObjSearcher.Get
        For Each MyObj In MyColl
            PAGEFILE = (MyObj("AllocatedBaseSize").ToString())
        Next
    Catch ex As Exception
        'An error occured getting data, display what we did get
        PAGEFILE = "Unavailable"
    End Try
    Try
        ' Get data from Win32_ComputerSystem_WMI
        MyObjSearcher = New System.Management.ManagementObjectSearcher(MyMgtScope.Path.ToString, _
                "Select * FROM Win32_ComputerSystem")
        ' Execute the query
        MyColl = MyObjSearcher.Get
        For Each MyObj In MyColl
            DOMAINRESULT = (MyObj("Domain").ToString())
            PCMODEL = (MyObj("Model").ToString())
            RAMTOTAL += Reformat_TB_GB_MB(MyObj("TotalPhysicalMemory").ToString())
        Next
    Catch ex As Exception
        'An error occured getting data, display what we did get
        DOMAINRESULT = "Unavailable"
        PCMODEL = "Unavailable"
        RAMTOTAL = "Unavailable"
    End Try
    Try
        ' Get data from Win32_ComputerSystem_WMI
        MyObjSearcher = New System.Management.ManagementObjectSearcher(MyMgtScope.Path.ToString, _
                "Select * FROM Win32_ComputerSystem")
        ' Execute the query
        MyColl = MyObjSearcher.Get
        For Each MyObj In MyColl
            LOGGEDINUSER += (MyObj("Username").ToString())
        Next
    Catch ex As Exception
        'An error occured getting data, display what we did get
        LOGGEDINUSER = "No One Is Logged In"
    End Try
    Try
        ' Get data from  Win32_LogicalDisk WMI
        MyObjSearcher = New System.Management.ManagementObjectSearcher(MyMgtScope.Path.ToString, _
                "SELECT * From Win32_LogicalDisk WHERE caption = 'C:'")
        ' Execute the query
        MyColl = MyObjSearcher.Get
        For Each MyObj In MyColl
            FREEDRIVESPACE = "C:\" & Reformat_TB_GB_MB(MyObj("Freespace").ToString())
        Next
    Catch ex As Exception
        'An error occured getting data, display what we did get
        FREEDRIVESPACE = "No Media Connected"
    End Try
    Try
        ' Get data from  Win32_LogicalDisk WMI
        MyObjSearcher = New System.Management.ManagementObjectSearcher(MyMgtScope.Path.ToString, _
                "SELECT * From Win32_LogicalDisk WHERE caption = 'E:' And DriveType <> 5")
        ' Execute the query
        MyColl = MyObjSearcher.Get
        For Each MyObj In MyColl
            EXTDRIVE1 = (MyObj("caption").ToString()) + " " & Reformat_TB_GB_MB(MyObj("Freespace").ToString())
        Next
        If EXTDRIVE1 = "" Then
            EXTDRIVE1 = "No Media Connected"
        End If
    Catch ex As Exception
        'An error occured getting data, display what we did get
        EXTDRIVE1 = "Error"
    End Try
    Try
        ' Get data from  Win32_LogicalDisk WMI
        MyObjSearcher = New System.Management.ManagementObjectSearcher(MyMgtScope.Path.ToString, _
                "SELECT * From Win32_LogicalDisk WHERE caption = 'F:' And DriveType <> 5")
        ' Execute the query
        MyColl = MyObjSearcher.Get
        For Each MyObj In MyColl
            EXTDRIVE2 = (MyObj("caption").ToString()) + " " & Reformat_TB_GB_MB(MyObj("Freespace").ToString())
        Next
        If EXTDRIVE2 = "" Then
            EXTDRIVE2 = "No Media Connected"
        End If
    Catch ex As Exception
        'An error occured getting data, display what we did get
        EXTDRIVE2 = "Error"
    End Try
    Try
        ' Get data from  Win32_LogicalDisk WMI
        MyObjSearcher = New System.Management.ManagementObjectSearcher(MyMgtScope.Path.ToString, _
                "SELECT * From Win32_LogicalDisk WHERE caption = 'F:' And DriveType <> 5")
        ' Execute the query
        MyColl = MyObjSearcher.Get
        For Each MyObj In MyColl
            EXTDRIVE3 = (MyObj("caption").ToString()) + " " & Reformat_TB_GB_MB(MyObj("Freespace").ToString())
        Next
        If EXTDRIVE3 = "" Then
            EXTDRIVE3 = "No Media Connected"
        End If
    Catch ex As Exception
        'An error occured getting data, display what we did get
        EXTDRIVE3 = "Error"
    End Try
    Try
        ' Get data from Win32_ComputerSystem_WMI
        MyObjSearcher = New System.Management.ManagementObjectSearcher(MyMgtScope.Path.ToString, _
                "Select * FROM Win32_VideoController Where DeviceID = 'VideoController1'")
        ' Execute the query
        MyColl = MyObjSearcher.Get
        For Each MyObj In MyColl
            Dim VideoResHorizontal = (MyObj("CurrenthorizontalResolution").ToString())
            Dim VideoResVertical = (MyObj("CurrentVerticalResolution").ToString())
            VIDEORES = VideoResHorizontal + " x " & VideoResVertical
        Next
    Catch ex As Exception
        'An error occured getting data, display what we did get
        VIDEORES = "Unavailable"
    End Try
    Try
        ' Get Network Info from Win32_NetworkAdapterConfiguration_WMI
        MyObjSearcher = New System.Management.ManagementObjectSearcher(MyMgtScope.Path.ToString, _
                "Select * FROM Win32_NetworkAdapterConfiguration WHERE IPEnabled = True")
        ' Execute the query
        MyColl = MyObjSearcher.Get
        For Each MyObj In MyColl
            If Not IsDBNull(MyObj.GetPropertyValue("IPAddress")) Then
                Dim IP As Array = MyObj.GetPropertyValue("IPAddress")
                For i = 0 To LBound(IP)
                    IPADDRESS = IP(i)
                    MACADDRESS = (MyObj("Macaddress").ToString())
                    DNSRESULT = (MyObj("DnsDomain").ToString())
                Next
            End If
        Next
    Catch ex As Exception
        'An error occured getting data, display what we did get
        IPADDRESS = "Unknown"
        MACADDRESS = "Unknown"
        DNSRESULT = "Unknown"
    End Try
    Try
        ' Get data from  Win32_TimeZone WMI
        MyObjSearcher = New System.Management.ManagementObjectSearcher(MyMgtScope.Path.ToString, _
                "Select * FROM Win32_TimeZone")
        ' Execute the query
        MyColl = MyObjSearcher.Get
        For Each MyObj In MyColl
            TIMEZONE1 = (MyObj("DayLightName").ToString())
        Next
    Catch ex As Exception
        'An error occured getting data, display what we did get
        TIMEZONE1 = "Unavailable"
    End Try
End Sub
Private Sub BackgroundWorkerMachineInfo_RunWorkerCompleted(ByVal sender As Object, ByVal e As System.ComponentModel.RunWorkerCompletedEventArgs) Handles BackgroundWorkerMachineInfo.RunWorkerCompleted
    OS_Result_Machine_Table.Text = OSNAME
    Service_Pack_Result_Machine_Table.Text = SERVICEPACK
    Image_Date_Result_Machine_Table.Text = IMAGEDATE
    Last_Reboot_Result_Machine_Table.Text = LASTREBOOT
    Pagefile_Size_Result_Machine_Table.Text = PAGEFILE + " MB"
    Domain_Result_Machine_Table.Text = DOMAINRESULT
    PC_Model_Result_Machine_Table.Text = PCMODEL
    RAM_Total_Result_Machine_Table.Text = RAMTOTAL
    Loggedin_User_Result_Machine_Table.Text = LOGGEDINUSER
    Free_Drive_Space_Result_Machine.Text = FREEDRIVESPACE
    Ext1_Drive_Space_Result_Machine.Text = EXTDRIVE1
    Ext2_Drive_Space_Result_Machine.Text = EXTDRIVE2
    Ext3_Drive_Space_Result_Machine.Text = EXTDRIVE3
    VideoRes_Result_Machine_Table.Text = VIDEORES
    IP_Address_Result_Machine_Table.Text = IPADDRESS
    MAC_Result_Machine_Table.Text = MACADDRESS
    DNS_Result_Machine_Table.Text = DNSRESULT
    TimeZone_Result_Machine_Table.Text = TIMEZONE1
    '----------------------------------------------------------------------
    UNC_Links_Header.Enabled = True
    Machine_Name_Textbox_Header.Enabled = True
End Sub

Private Sub Stop_Button_Header_Click(sender As System.Object, e As System.EventArgs) Handles Stop_Button_Header.Click
    BackgroundWorkerMachineInfo.CancelAsync()
End Sub

推荐答案

我不确定,您可以尝试查看
I''m not sure, you might try looking into
control.checkForIllegalcrossthreadcalls=false


http://msdn.microsoft.com/en-us/library/system.windows.forms.control.checkforillegalcrossthreadcalls.aspx [ ^ ]


http://msdn.microsoft.com/en-us/library/system.windows.forms.control.checkforillegalcrossthreadcalls.aspx[^]


这篇关于vb.net和后台工作人员问题的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆