This is a problem I used to have all the time with the serial port class in .NET 2.0. It was suggested that upgrading to .NET 4 would fix the problem... and it did in almos
It seems that this bug won't be fixed by Microsoft any time soon, and that there is no good workaround. I've spent over a year working on this problem off-and-on.
The solution for me was to use a 3rd party component. After testing 15+, I've found that the only one that really works is CommStudio.
The free express version is here: http://www.componentsource.com/products/commstudio/downloads.html?rv=42917
I also had this problem, but I found a .NET library which fires a Faulted event, when the adapter is unplugged and after that it disconnects normally. You can reconnect any time, when the adapter is plugged back. The name of the library is ZylSerialPort.NET.
Adding the following to app.config
<runtime>
<legacyUnhandledExceptionPolicy enabled="1"/>
</runtime>
has worked for me. See Problem with SerialPort
(I know this is a 2-year old question, but it looks like the problem is still relevant, so I'm posting some code I found that I think could be useful.)
I had a similar problem in a .NET 2.0 VB project. Often when disconnecting an USB-to-serial adapter I would get an "UnauthorizedAccessException" that crashed the program.
I haven't had the chance to port that project to .NET 4.x yet. Also, I understand the exception I was seeing is not the same as that mentioned by the OP, but I think the underlying problem might be the same, so I'd like to share a solution I found.
http://go4answers.webhost4life.com/Example/unauthorizedaccessexception-6130.aspx
The code towards the bottom of that page solved the problem for me. Here's the actual VB.NET class I used:m
Option Explicit On
Option Strict Off ' so we can use late binding (1)
Imports System.IO.Ports
''' <summary>
''' This is a drop-in replacement for .net built-in SerialPort class.
''' It avoids "UnauthorizedAccessException" errors that sometimes happen
''' when disconnecting and reconnecting USB-to-serial adapters.
''' </summary>
''' <remarks>http://go4answers.webhost4life.com/Example/unauthorizedaccessexception-6130.aspx</remarks>
Public Class ExSerialPort
Inherits SerialPort
Public Sub New()
MyBase.New()
End Sub
Protected Overrides Sub Dispose(ByVal disposing As Boolean)
Dim mytype As Type = GetType(SerialPort)
Dim field As Reflection.FieldInfo = mytype.GetField("internalSerialStream", Reflection.BindingFlags.Instance Or Reflection.BindingFlags.NonPublic)
Dim stream As Object = field.GetValue(Me)
If Not stream Is Nothing Then
Try
stream.Dispose() ' (1)
Catch ex As Exception
' do nothing
End Try
End If
MyBase.Dispose(disposing)
End Sub
End Class