【发布时间】:2014-03-31 08:59:54
【问题描述】:
我在我的桌面应用程序中进行了一些非常简单的错误日志记录,该应用程序通过SerialPort 与设备通信。我要做的一件事是设置一个全局异常捕获器,它只使用以下方式记录堆栈跟踪:
AppDomain.CurrentDomain.UnhandledException += UnhandledExceptionHandler;
我有一个用户在他的日志中显示了一个错误。没有其他人有这个问题。我不知道在哪里搜索这个未捕获的异常。而且我不知道应该在哪里尝试捕捉它,因为我不完全理解它是什么。
我使用 .NET SerialPort 对象,我所做的一切都是打开端口并进行一些简单的读写操作。
有没有人能够解释这个异常是什么/意味着什么,我可以做些什么来修复它,或者我应该在哪里尝试捕捉错误?每次我触摸我的 SerialPort 对象时,我都会在 try and catch 块中这样做。所以我完全不知所措。
System.ObjectDisposedException: Safe handle has been closed
at System.Runtime.InteropServices.SafeHandle.DangerousAddRef(Boolean& success)
at System.StubHelpers.StubHelpers.SafeHandleAddRef(SafeHandle pHandle, Boolean& success)
at Microsoft.Win32.UnsafeNativeMethods.GetOverlappedResult(SafeFileHandle hFile, NativeOverlapped* lpOverlapped, Int32& lpNumberOfBytesTransferred, Boolean bWait)
at System.IO.Ports.SerialStream.EventLoopRunner.WaitForCommEvent()
at System.Threading.ThreadHelper.ThreadStart_Context(Object state)
at System.Threading.ExecutionContext.runTryCode(Object userData)
at System.Runtime.CompilerServices.RuntimeHelpers.ExecuteCodeWithGuaranteedCleanup(TryCode code, CleanupCode backoutCode, Object userData)
at System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state)
at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean ignoreSyncCtx)
at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)
at System.Threading.ThreadHelper.ThreadStart()
【问题讨论】:
-
堆栈跟踪是什么?
-
"对已释放对象执行操作时抛出的异常。"
-
哈哈抱歉我完全忘了添加 StackTrace
-
@O.O 我很抱歉,因为当您发表评论时我没有 StackTrace。我意识到这种类型的异常是如何引发的。但是跟踪没有为我提供有关如何捕获或防止它的信息(我可以看到)。这似乎是一个 .NET 问题。
-
@MichaelMankus - 似乎异常是在不同的线程上引发的。将你的 try-catch 块移动到执行读/写的线程中,看看是否能解决你的问题。
标签: c# .net exception serial-port