Hallo,
ich habe VB.NET 2010 Programm, mit dem ich das hinzufügen und entfernen von USB COMPorts detektiere.
Das funktioniert soweit auch ganz gut, nur wird aus mir unerfindlichen Gründen der ManagementEventWatcher Event 2x ausgelöst.
Ich habs nun schon 100x debugged, aber ich komme nicht drauf, wo der Fehler liegt. Vielleicht kann mir jemand auf die Sprünge helfen?
Gruß
Michael
ich habe VB.NET 2010 Programm, mit dem ich das hinzufügen und entfernen von USB COMPorts detektiere.
Das funktioniert soweit auch ganz gut, nur wird aus mir unerfindlichen Gründen der ManagementEventWatcher Event 2x ausgelöst.
Ich habs nun schon 100x debugged, aber ich komme nicht drauf, wo der Fehler liegt. Vielleicht kann mir jemand auf die Sprünge helfen?
Gruß
Michael
VB.NET-Quellcode
- ' ####################### USB inserted/removed ##########################################
- Private Sub AddRemoveUSBHandler()
- Dim q As WqlEventQuery
- Dim scope As New ManagementScope("root\CIMV2")
- scope.Options.EnablePrivileges = True
- Try
- q = New WqlEventQuery()
- q.EventClassName = "__InstanceDeletionEvent"
- q.WithinInterval = New TimeSpan(0, 0, 3)
- q.Condition = "TargetInstance ISA 'Win32_USBControllerdevice'"
- w = New ManagementEventWatcher(scope, q)
- AddHandler w.EventArrived, AddressOf USBRemoved
- w.Start()
- Catch e As Exception
- If w IsNot Nothing Then
- w.Stop()
- End If
- End Try
- End Sub
- Private Sub AddInsetUSBHandler()
- Dim q As WqlEventQuery
- Dim scope As New ManagementScope("root\CIMV2")
- scope.Options.EnablePrivileges = True
- Try
- q = New WqlEventQuery()
- q.EventClassName = "__InstanceCreationEvent"
- q.WithinInterval = New TimeSpan(0, 0, 3)
- q.Condition = "TargetInstance ISA 'Win32_USBControllerdevice'"
- w = New ManagementEventWatcher(scope, q)
- AddHandler w.EventArrived, AddressOf USBAdded
- w.Start()
- Catch e As Exception
- If w IsNot Nothing Then
- w.Stop()
- End If
- End Try
- End Sub
- Public Sub USBAdded(ByVal sender As Object, ByVal e As EventArgs)
- TryCast(sender, ManagementEventWatcher).Stop()
- Dim RTBText As String = "USB hinzugefügt" & vbNewLine ' den anzuzeigenden Text erzeugen.
- If RichTextBox1.InvokeRequired Then ' Da die Daten aus einem anderem Thread kommen müssen wir die Ausgabe über Invoke machen.
- RichTextBox1.Invoke(New UpdateTextHandler(AddressOf UpdateControl), RichTextBox1, RTBText)
- Else
- UpdateControl(RichTextBox1, RTBText) 'Meldungstext zu Textbox hinzufügen.
- End If
- TryCast(sender, ManagementEventWatcher).Start()
- End Sub
- ' Public Shared Sub USBRemoved(ByVal sender As Object, ByVal e As EventArgs)
- Public Sub USBRemoved(ByVal sender As Object, ByVal e As EventArgs)
- TryCast(sender, ManagementEventWatcher).Stop()
- Dim RTBText As String = "Lightblock entfernt" & vbNewLine ' den anzuzeigenden Text erzeugen.
- If RichTextBox1.InvokeRequired Then ' Da die Daten aus einem anderem Thread kommen müssen wir die Ausgabe über Invoke machen.
- RichTextBox1.Invoke(New UpdateTextHandler(AddressOf UpdateControl), RichTextBox1, RTBText)
- Else
- UpdateControl(RichTextBox1, RTBText) 'Meldungstext zu Textbox hinzufügen.
- End If
- TryCast(sender, ManagementEventWatcher).Start()
- End Sub
- ' *** Procedur im Main Thread um auf die Contols treadübergreifend zuzugreifen.
- Private Sub UpdateControl(ByVal MyRichTextBox1 As RichTextBox, ByVal Text As String)
- RichTextBox1.AppendText(Text) 'Meldungstext zu Textbox hinzufügen.
- RichTextBox1.Refresh()
- End Sub