vb.net和后台工作人员问题

编程入门 行业动态 更新时间:2024-10-16 02:26:18
本文介绍了vb和后台工作人员问题的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧! 问题描述

我是vb的新手,并且我一直在研究此应用程序,以在我们的网络中获取远程计算机的信息.在使用后勤人员之前,我的代码工作正常.现在,当它运行时,它会提取信息,但是当我重置字段时,在当前用户,内存和硬盘驱动器大小中,它会清除它,但随后会返回新信息并紧随其后是旧信息.它喜欢它的旧数据,并且不会释放它.我尝试使用dispose命令,甚至每次运行时都创建一个新工作器.任何帮助将是巨大的. 如果我在后台工作人员外部拥有代码,则该代码有效,但是当我这样做时,它将锁定应用程序,直到完成提取信息为止. 抱歉,冗长的代码,但是我想确保您可以看到我在代码方面的明智选择.

I m new to vb 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

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

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

更多推荐

vb.net和后台工作人员问题

本文发布于:2023-11-16 20:29:41,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1607352.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:后台   工作人员   vb   net

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!