.NET 4 Serial Port ObjectDisposedException on Windows 7 Only

后端 未结 4 1349
伪装坚强ぢ
伪装坚强ぢ 2020-12-07 00:57

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

相关标签:
4条回答
  • 2020-12-07 01:40

    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

    0 讨论(0)
  • 2020-12-07 01:49

    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.

    0 讨论(0)
  • 2020-12-07 01:53

    Adding the following to app.config

    <runtime>
     <legacyUnhandledExceptionPolicy enabled="1"/>
    </runtime>
    

    has worked for me. See Problem with SerialPort

    0 讨论(0)
  • 2020-12-07 01:59

    (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
    
    0 讨论(0)
提交回复
热议问题