有一个c#做的项目,和硬件做一些通信和处理。 和硬件的通信是串口通信。不涉及网络。
但是有时候会出现一个问题。windows系统会出现一个对话框。说system.ObjectDisposedException发生。
对话框就是错误报告送信还是不送信。 要是不去管那个错误报告,程序还能继续运行。要是关掉错误报告的话,程序也就跟着关掉了。 
这个真是不知道那里有问题啊,向大家求救。 
程序也catch不到这个异常阿。 实在头疼啊。
谢谢大家了。

解决方案 »

  1.   

    It says you try to call an object that is disposed.socket.Close();
    socket.Send();                 // <--- exception
      

  2.   

    嗬嗬, 是啊。
    但是一般都能捕获啊。 其他网页有说不能捕获的ObjectDisposedException,都是说socket。
    只是现在这个没有用到socket啊。  RS232通信的话,也会出现这个问题么?
    要是出现的话,我从哪里下手啊?
    谢谢。
      

  3.   


    ...
    程序也catch不到这个异常阿。 实在头疼啊。 
    捕获不到一般是由于这个异常是由其他线程中抛出的(不一定是你创建的,可能通讯组件内部使用)。
    你可以试着登记Application.ThreadException+=...来得到通知(通知而已)并进行分析。ObjectDisposedException异常一般暗示程序逻辑那里出了问题,一般要解决逻辑问题而不是试图去忽略异常。
      

  4.   

    捕获不到一般是由于这个异常是由其他线程中抛出的(不一定是你创建的,可能通讯组件内部使用)。 
    你可以试着登记Application.ThreadException+=...来得到通知(通知而已)并进行分析。 ObjectDisposedException异常一般暗示程序逻辑那里出了问题,一般要解决逻辑问题而不是试图去忽略异常。 
      

  5.   

    我加了这个: 
    Thread.GetDomain().UnhandledException += new UnhandledExceptionEventHandler(Application_UnhandledException);来显示错误。
    内容如下:
    エラーが発生しました。開発元にお知らせください【`错误内容】
    Safe handle has been closed【....】
       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)高人有什么看法阿?
    请多多指教。
      

  6.   

    应该是在回调(callback)是socket对象已经被GC干掉了,lz试试下面的或者把socket做成singleton。
    GC.KeepAlive(socket);
      

  7.   

    我打了很多log,看起来好像是这样的。
    有一个线程(Standby)一直在通过串口发命令,和读取命令。
    问题出现的时候,此线程正处于发信状态中。
    这个时候,另外一个事件作了Standby.Abort();操作
    然后就出现问题了。没有出现问题的情况都是在Standby线程读取串口数据后或者读取串口数据时,进行Standby.Abort();操作的。
    不知道是不是由于Standby.Abort();操作引起的那个不可捕获的异常的?
    请高人指点
    如果是,怎么处理好呢?
      

  8.   

    嗯,谢谢大家了。问题应该就是在串口正在通信的时候,关掉线程出现的。
    其实主要是他catch不到。头疼了半天。谢谢各位。