表格以某种方式处理

时间:2010-05-30 10:32:57

标签: c# winforms multithreading dispose objectdisposedexception

我有一个客户端 - 服务器应用程序,我使用经典的套接字和线程来接收/发送数据和监听客户端。

该应用程序运行正常,但经过一段随机时间后,我得到 ObjectDisposedException

System.ObjectDisposedException: Cannot access a disposed object.
Object name: 'MainForm'.
   at System.Windows.Forms.Control.MarshaledInvoke(Control caller, Delegate method, Object[] args, Boolean synchronous)
   at System.Windows.Forms.Control.Invoke(Delegate method, Object[] args)
   at System.Windows.Forms.Control.Invoke(Delegate method)

从客户端Socket线程调用该代码,我使用 Invoke()方法在UI线程上运行代码。

我确信我不会手动处理表单,也不会使用关闭()(表单因用户点击关闭按钮而关闭),所以我不知道是什么原因导致其处置

修改:在表单关闭期间抛出 - 它完全是随机发生的。

2 个答案:

答案 0 :(得分:1)

您是否尝试重写Dispose方法并在其中设置断点? callstack可能会告诉你它被处理的原因和位置。

答案 1 :(得分:0)

我遇到了类似的问题,我只是隐藏了一个表单而从未关闭它或处理它。

处理表单的根本原因是由于取消按钮的DialogResult 实际上强制表单关闭,然后处置是隐式的。

为了解决这个问题,我刚从表格中删除了DialogResult beaviour。