Vista SP1 Visual Studio 2008 SP1 .NET 3.5 SP1 C#
我正在玩的winforms应用程序使用SerialPort对象作为私有变量。当应用程序被编译并执行时,它能够很好地工作。在没有任何断点的情况下,在调试模式下运行也很好用。在我停在断点处,尝试逐步执行代码时,90%的时间会出现一个未处理的异常对话框,其中包含以下详细信息:
System.ObjectDisposedException was unhandled Message="Safe handle has been closed" Source="mscorlib" ObjectName="" StackTrace: at Microsoft.Win32.Win32Native.SetEvent(SafeWaitHandle handle) at System.Threading.EventWaitHandle.Set() at System.IO.Ports.SerialStream.AsyncFSCallback(UInt32 errorCode, UInt32 numBytes, NativeOverlapped* pOverlapped) at System.Threading._IOCompletionCallback.PerformIOCompletionCallback(UInt32 errorCode, UInt32 numBytes, NativeOverlapped* pOVERLAP) InnerException:
令人沮丧的是,我不需要在涉及串口的代码中操作!我只需要对端口进行过某些操作。所以我可能会读取一个字符串,操作字符串,将两个数字相加,然后嘭。
再次说明,当未进行调试或者调试时没有任何断点时,这个工作是可以正常进行的。但是,似乎当在断点处停止时,CLR会在另一个线程上释放SerialStream。
网上有很多有关移除USB设备引起这个问题的讨论。但是我正在使用内置的COM1主板端口。
我觉得在.NET 2.0中我没有这个问题,所以我可能要回去用那个版本...
在我贴出代码之前,我需要将应用程序简化一些,但是任何人在调试器中见过这样的行为吗?
非常感谢!