Top-Themen

Aktuelle Themen (A bis Z)

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit

Multithreading in VB 2005

Mitglied: kruemel666

kruemel666 (Level 1) - Jetzt verbinden

25.11.2008 um 08:08 Uhr, 2035 Aufrufe

Hallo zusammen,

folgendes Problem, ich bin dabei mir ein Programm zu schreiben das von Clients den Stauts bestimmter Dienste abruft. Da es sich um eine Größere anzahl von Clients handelt will ich das ganze über Multithreading lösen. Ich hab nun ein Form mit den Steuerlementen und einem Button der mir einen Threadpool initialisiert. Der Threadpool greift auf eine Sub in einer extra Klasse zu die mir den Status pollt. Das ganze funktioniert soweit ganz gut. Nun hab ich das Problem wie ich die Hosts mit fehlerhaften Diensten in die Listbox aus Form1 eingetragen bekomme...

Hab jetzt schon ne Weile gegoogelt und rausgefunden das ich wohl einen Deleganten brauche und auf das Steuerelement über die Invoke Methode zugreifen kann. Ich bin aber noch relativ neu in VB und steh auf Deutsch gesagt ziemlich auf da Leitung wie das Teil funktioniert.

Hier mal mein Code zur veranschaulichung:

FORM1.vb*
01.
Public Delegate Sub AddCallback(ByVal items() As Object) 
02.
 
03.
Public Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click 
04.
        Me.ProgressBar1.Value = 0 
05.
        Dim domain As DirectoryEntry = New DirectoryEntry("LDAP://DOMAINSTRING") 
06.
        Dim errorlevel = 0 
07.
        Dim hostcount As Integer 
08.
        Dim ready As AutoResetEvent = New AutoResetEvent(False) 
09.
        For Each child As DirectoryEntry In domain.Children 
10.
            hostcount = hostcount + 1 
11.
        Next 
12.
        Me.ProgressBar1.Maximum = hostcount 
13.
        Dim workerthreads, CompletionPortThreads As Integer 
14.
        'Dim hostarbeit As Integer 
15.
        For Each child As DirectoryEntry In domain.Children 
16.
            If child.Name Like "CN=HOSTNAME" Then 
17.
                Dim hostname = Mid(child.Name, 4) 
18.
                Debug.Print("Beginne mit host: " & hostname) 
19.
                Dim abfrage As New dataquery(hostname) 
20.
                Debug.Print("Übergebe hostname an query: " & hostname) 
21.
                ThreadPool.QueueUserWorkItem(New Threading.WaitCallback(AddressOf abfrage.servicequery), ready) 
22.
                      End If 
23.
        Next 
24.
              MsgBox("fertig main") 
25.
    End Sub
*CLASS1.vb
01.
Imports System.Management 
02.
Imports System.Net 
03.
Imports System.Net.NetworkInformation 
04.
Public Class dataquery 
05.
 
06.
    Private _hostname As String 
07.
 
08.
    Public ReadOnly Property Hostname() As String 
09.
        Get 
10.
            Return _hostname 
11.
        End Get 
12.
    End Property 
13.
 
14.
    Public Sub New(ByVal hostname As String) 
15.
        Me._hostname = hostname 
16.
    End Sub 
17.
 
18.
    Public Sub servicequery(ByVal obj As Object) 
19.
        Dim pingsender As New Ping() 
20.
        Dim strcomputer As String 
21.
        strcomputer = _hostname 
22.
        On Error Resume Next 
23.
        Dim pingreply = pingsender.Send(strcomputer) 
24.
        If pingreply.status = IPStatus.Success Then 
25.
            If Err.Number <> 0 Then 
26.
                Debug.Print("Hostname unbekannt: " & _hostname) 
27.
                Exit Sub 
28.
            End If 
29.
            Debug.Print("Host ist Online: " & _hostname) 
30.
            Dim errorlevel = 0 
31.
            Dim mos As ManagementObjectSearcher 
32.
            Dim moc As ManagementObjectCollection 
33.
            Dim mic As ManagementScope 
34.
            Dim mo As ManagementObject 
35.
            Dim pd As PropertyData 
36.
            Dim myConnectionOptions As New System.Management.ConnectionOptions 
37.
            With myConnectionOptions 
38.
                .Impersonation = System.Management.ImpersonationLevel.Impersonate 
39.
                .Authentication = System.Management.AuthenticationLevel.Packet 
40.
            End With 
41.
 
42.
            Dim myManagementScope As System.Management.ManagementScope 
43.
            myManagementScope = New System.Management.ManagementScope("\\" & strcomputer.ToString & "\root\cimv2", myConnectionOptions) 
44.
            myManagementScope.Connect() 
45.
            If myManagementScope.IsConnected = False Then 
46.
            End If 
47.
            Debug.Print("Beginne mit Servicequery: " & _hostname) 
48.
            mos = New ManagementObjectSearcher(myManagementScope.Path.ToString, "Select State from Win32_Service where name = 'wuauserv'") 
49.
            moc = mos.Get() 
50.
            For Each mo In moc 
51.
                For Each pd In mo.Properties 
52.
                    If pd.Value <> "Running" Then 
53.
                        errorlevel += 1 
54.
                    End If 
55.
                Next 
56.
            Next 
57.
            mos = New ManagementObjectSearcher(myManagementScope.Path.ToString, "Select State from Win32_Service where name = 'Intel Targeted Multicast'") 
58.
            moc = mos.Get() 
59.
            For Each mo In moc 
60.
                For Each pd In mo.Properties 
61.
                    If pd.Value <> "Running" Then 
62.
                        errorlevel += 1 
63.
                    End If 
64.
                Next 
65.
            Next 
66.
            mos = New ManagementObjectSearcher(myManagementScope.Path.ToString, "Select State from Win32_Service where name = 'CBA8'") 
67.
            moc = mos.Get() 
68.
            For Each mo In moc 
69.
                For Each pd In mo.Properties 
70.
                    If pd.Value <> "Running" Then 
71.
                        errorlevel += 1 
72.
                    End If 
73.
                Next 
74.
            Next 
75.
            mos = New ManagementObjectSearcher(myManagementScope.Path.ToString, "Select State from Win32_Service where name = 'Softmon'") 
76.
            moc = mos.Get() 
77.
            For Each mo In moc 
78.
                For Each pd In mo.Properties 
79.
                    If pd.Value <> "Running" Then 
80.
                        errorlevel += 1 
81.
                    End If 
82.
                Next 
83.
            Next 
84.
            mos = New ManagementObjectSearcher(myManagementScope.Path.ToString, "Select State from Win32_Service where name = 'ISSUSER'") 
85.
            moc = mos.Get() 
86.
            For Each mo In moc 
87.
                For Each pd In mo.Properties 
88.
                    If pd.Value <> "Running" Then 
89.
                        errorlevel += 1 
90.
                    End If 
91.
                Next 
92.
            Next 
93.
            mos = New ManagementObjectSearcher(myManagementScope.Path.ToString, "Select State from Win32_Service where name = 'ntrtscan'") 
94.
            moc = mos.Get() 
95.
            For Each mo In moc 
96.
                For Each pd In mo.Properties 
97.
                    If pd.Value <> "Running" Then 
98.
                        errorlevel += 1 
99.
                    End If 
100.
                Next 
101.
            Next 
102.
            mos = New ManagementObjectSearcher(myManagementScope.Path.ToString, "Select State from Win32_Service where name = 'tmlisten'") 
103.
            moc = mos.Get() 
104.
            For Each mo In moc 
105.
                For Each pd In mo.Properties 
106.
                    If pd.Value <> "Running" Then 
107.
                        errorlevel += 1 
108.
                    End If 
109.
                Next 
110.
            Next 
111.
            mos = New ManagementObjectSearcher(myManagementScope.Path.ToString, "Select State from Win32_Service where name = 'lanmanserver'") 
112.
            moc = mos.Get() 
113.
            For Each mo In moc 
114.
                For Each pd In mo.Properties 
115.
                    If pd.Value <> "Running" Then 
116.
                        errorlevel += 1 
117.
                    End If 
118.
                Next 
119.
            Next 
120.
            mos = New ManagementObjectSearcher(myManagementScope.Path.ToString, "Select State from Win32_Service where name = 'ofcpfwSvc'") 
121.
            moc = mos.Get() 
122.
            For Each mo In moc 
123.
                For Each pd In mo.Properties 
124.
                    If pd.Value <> "Running" Then 
125.
                        errorlevel += 1 
126.
                    End If 
127.
                Next 
128.
            Next 
129.
            If errorlevel >= 0 Then 
130.
                Debug.Print(errorlevel & " Dienste laufen nicht auf " & _hostname) 
131.
                Dim i As New List(Of String) 
132.
                i.Add(_hostname) 
133.
                If Form1.ListBox1.InvokeRequired Then 
134.
                    Form1.ListBox1.Invoke(New Form1.AddCallback(AddressOf Form1.ListBox1.Items.AddRange), New Object() {i.ToArray}) 
135.
                Else 
136.
                    Form1.ListBox1.Items.Add(_hostname) 
137.
                End If 
138.
            End If 
139.
            Else 
140.
                Exit Sub 
141.
            End If 
142.
            obj.set() 
143.
    End Sub 
144.
 
145.
End Class

Das ganze funktioniert allerdings wird kein Eintrag in die Listbox hinzugefügt.
Des weiteren wäre es ganz gut wenn ich ein Wait auf den Threadpool setzen könnte damit die Meldung "fertig" erst kommt wenn alle Clients gepollt sind.

Schonmal vielen Dank

LG
Phil
Ähnliche Inhalte
Batch & Shell
Anmeldeskript in VB
gelöst Frage von mschaedler1982Batch & Shell7 Kommentare

Hallo zusammen. Ich habe hier ein aktuelles VB Skript was bei uns zur Anmeldung verwendet wird. Am Ende des ...

Visual Studio

VB: Batchprogramm: Resultat zurückgeben an VB Form (Textfeld)

gelöst Frage von PixL86Visual Studio7 Kommentare

Hallo Admins, sitze aktuell an einem kleinen Problem. Per VB wird das Tool NCFTP(.exe) gestartet, NCFTP arbeitet allerdings im ...

VB for Applications

VB-Script in VB-Script starten und Parameter übergeben

gelöst Frage von denkisVB for Applications7 Kommentare

Hallo liebe Scriptgemeinde, ich muss mehrere Rechner für den Übergang in eine neue Domäne vorbereiten. Dafür sind drei wesentliche ...

Batch & Shell

Powershell Skript optimieren, Performance Optimierung, Multithreading, CSV Stapelverarbeitung, CSV Filter

Frage von RippchenBatch & Shell3 Kommentare

Hallo, ich nutze folgendes Skript: Ich nutze es zur Stapelverarbeitung von CSV Dateien (weit über 100000 Dateien) , die ...

Neue Wissensbeiträge
Humor (lol)

WhatsApp-Nachrichten endlich auch per Bluetooth versendbar

Information von BassFishFox vor 3 StundenHumor (lol)1 Kommentar

Genau darauf habe ich gewartet! ;-) Der beliebte Messaging-Dienst WhatsApp erhält eine praktische neue Funktion: Ab dem nächsten Update ...

Google Android

Googles "Android Enterprise Recommended" für Unternehmen

Information von kgborn vor 16 StundenGoogle Android3 Kommentare

Hier eine Information, die für Administratoren und Verantwortliche in Unternehmen, die für die Beschaffung und das Rollout von Android-Geräten ...

Sicherheit

Intel gibt neue Spectre V2-Microcode-Updates frei (20.02.2018)

Information von kgborn vor 16 StundenSicherheit

Intel hat zum 20. Februar 2018 weitere Microcode-Updates für OEMs freigegeben, um Systeme mit neueren Prozessoren gegen die Spectre ...

Microsoft
ARD-Doku - Das Microsoft Dilemma
Tipp von Knorkator vor 19 StundenMicrosoft3 Kommentare

Hallo zusammen, vor einigen Tagen lief in der ARD u.a. Reportage. Das Youtube Video dazu dürfte länger verfügbar sein. ...

Heiß diskutierte Inhalte
Windows Server
AD DS findet Domäne nicht, behebbar?
Frage von schapitzWindows Server40 Kommentare

Guten Tag, ich habe bei einem Kunden ein Problem mit den AD DS. Umgebung ist folgende: Windows Server 2016 ...

Router & Routing
LANCOM VPN CLIENT einrichten
Frage von Finchen961988Router & Routing27 Kommentare

Hallo, ich habe ein Problem und hoffe ihr könnt mir helfen, wir haben einen Kunden der hat einen Speedport ...

Router & Routing
ISC DHCP 2 Subnetze
gelöst Frage von janosch12Router & Routing19 Kommentare

Hallo, ich betreibe bei mir im Netzwerk einen ISC DHCP Server auf Debian, der DHCP verwaltet aktuell ein /24 ...

Switche und Hubs
Cisco SG350X-48 AdminIP in anderes VLAN
Frage von lcer00Switche und Hubs14 Kommentare

Hallo zusammen, ich habe ein Problem mir einem Cisco SG350X-48 bei der Erstinstallation wurde eine IP 192.168.0.254 (Default VLAN ...