Moin moin
Ich habe hier eine Class, die soweit auch funktioniert. Ein kleines / großes Problem habe ich jedoch mit einem externen USB-CardReader.
Stecke ich den kompletten Reader ein oder ziehe ihn ab, reagiert die Class wie sie soll. Die Events feuern.
Ziehe ich aber nur die SD-Karte aus dem Reader, reagiert die Class nicht, ebenso beim einstecken. Die Events feuern nicht.
Wie kann ich das lösen?
Spoiler anzeigen
Ich habe hier eine Class, die soweit auch funktioniert. Ein kleines / großes Problem habe ich jedoch mit einem externen USB-CardReader.
Stecke ich den kompletten Reader ein oder ziehe ihn ab, reagiert die Class wie sie soll. Die Events feuern.
Ziehe ich aber nur die SD-Karte aus dem Reader, reagiert die Class nicht, ebenso beim einstecken. Die Events feuern nicht.
Wie kann ich das lösen?
VB.NET-Quellcode
-
- Public Class USBListener
- Inherits NativeWindow
- Private Const WM_DEVICECHANGE As Integer = &H219
- Private Const DBT_DEVICEARRIVAL As Integer = &H8000
- Private Const DBT_DEVICEREMOVECOMPLETE As Integer = &H8004
- Public Event USBEvent As EventHandler(Of USBEventArgs)
- Public Event TimerElapsed As EventHandler
- Private WithEvents timer As Timer
- Public Sub New()
- timer = New Timer()
- timer.Interval = 3000 ' 3 Sekunden
- timer.Enabled = False
- End Sub
- Public Sub StartMonitoring()
- Dim params As New CreateParams()
- Me.CreateHandle(params)
- End Sub
- Protected Overrides Sub WndProc(ByRef msg As Message)
- MyBase.WndProc(msg)
- Dim wParam = msg.WParam.ToInt32()
- If msg.Msg = WM_DEVICECHANGE Then
- If wParam = DBT_DEVICEARRIVAL Then
- RaiseEvent USBEvent(Me, New USBEventArgs(True))
- StartTimer()
- ElseIf wParam = DBT_DEVICEREMOVECOMPLETE Then
- RaiseEvent USBEvent(Me, New USBEventArgs(False))
- StartTimer()
- End If
- End If
- End Sub
- Private Sub StartTimer()
- timer.Stop()
- timer.Start()
- End Sub
- Private Sub Timer_Tick(sender As Object, e As EventArgs) Handles timer.Tick
- timer.Stop()
- RaiseEvent TimerElapsed(Me, EventArgs.Empty)
- End Sub
- End Class
- Public Class USBEventArgs
- Inherits EventArgs
- Private _isInserted As Boolean
- Public ReadOnly Property IsInserted As Boolean
- Get
- Return _isInserted
- End Get
- End Property
- Public Sub New(isInserted As Boolean)
- _isInserted = isInserted
- End Sub
- End Class
Asperger Autistin. Brauche immer etwas um gewisse Sachen zu verstehen.