try-catch? Hej Pelle! Du kan ju se om det skickas något WM_DEVICECHANGE message när man kopplar ur USB COM Porten, se: tack för vägledning. Jag har stött på följande ... men får ingen händelse Vet inte riktigt hur man skall få till något svar "Protected Overloads Overrides Sub WndProc(ByRef m As Message)" ... Com-port problem
Startar en Com-port i en egen tråd. Com-porten består av en USB adapter. Om jag sedan tar bort USB adaptern från datorn så upphör Com-porten. Mitt program fortsätter utan problem. Men när jag stänger av programmet så visar sig följande felmeddelande:
<code>
System.UnauthorizedAccessException was unhandled
Message="Åtkomst till porten nekades."
Source="System"
StackTrace:
vid System.IO.Ports.InternalResources.WinIOError(Int32 errorCode, String str)
vid System.IO.Ports.InternalResources.WinIOError()
vid System.IO.Ports.SerialStream.Dispose(Boolean disposing)
vid System.IO.Ports.SerialStream.Finalize()
</code>
Kan man på något sett greppa tag i detta problem så man kan meddela användaren om att Com-porten är demonterad?Sv: Com-port problem
Kolla om det just är System.UnauthorizedAccessException så kanske du kan utgå från att det är just detta problemet och lägga ut en "normal" feltext.Sv:Com-port problem
Jag har försökt med try-catch men utan resultat. Felmeddelandet snappas ej upp. Det jag gör att vänta på att det skall finnas en ändring på vald kom-pinne tex RxD via följande kod.
<code>
Friend Overridable Property comPort() As SerialPort
Get
Return Me._serialPort
End Get
Set(ByVal WithEventsValue As SerialPort)
Dim handlerPC As SerialPinChangedEventHandler = New SerialPinChangedEventHandler(AddressOf Me.comPort_PinChanged)
Me._serialPort = WithEventsValue
If (Not Me._serialPort Is Nothing) Then
AddHandler Me._serialPort.PinChanged, handlerPC
End If
End Set
End Property
</code>
Om komporten uteblir blir det ingen pinn ändring därför kommer inget fel att uppsnappas... eller? Sv: Com-port problem
http://www.codeproject.com/KB/system/DriveDetector.aspxSv:Com-port problem
<code>
Imports System.IO.Ports
Public Class frmMeter_data
Private Sub frmMeter_data_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
....
End Sub
Private Const WM_DEVICECHANGE As Integer = &H219
Private Const DBT_DEVICEARRIVAL As Integer = &H8000
Private Const DBT_DEVICEREMOVECOMPLETE As Integer = &H8004
Protected Overloads Overrides Sub WndProc(ByRef m As Message)
Select Case m.Msg
Case WM_DEVICECHANGE
Select Case m.WParam.ToInt32
Case DBT_DEVICEARRIVAL
'Den anländer
MsgBox("HEJ")
Case DBT_DEVICEREMOVECOMPLETE
'Den avlägsnas
MsgBox("HEJDÅ")
End Select
Exit Select
End Select
MyBase.WndProc(m)
End Sub
End Class
</code>Sv: Com-port problem
Sv:Com-port problem
Om jag lade koden i MDI så fungerade det. Men om jag nu vill lägga koden i en klass som jag kör upp i en tråd hur skall man då göra?
<code>
Private Const WM_DEVICECHANGE As Integer = &H219
Private Const DBT_DEVICEARRIVAL As Integer = &H8000
Private Const DBT_DEVICEREMOVECOMPLETE As Integer = &H8004
Protected Overloads Overrides Sub WndProc(ByRef m As Message)
Select Case m.Msg
Case WM_DEVICECHANGE
Select Case m.WParam.ToInt32
Case DBT_DEVICEARRIVAL
'Den anländer
MsgBox("USB KOM")
Case DBT_DEVICEREMOVECOMPLETE
'Den avlägsnas
MsgBox("USB GICK")
End Select
Exit Select
End Select
MyBase.WndProc(m)
End Sub
</code>