我有一个客户端 - 服务器应用程序,我使用经典的套接字和线程来接收/发送数据和监听客户端。
该应用程序运行正常,但经过一段随机时间后,我得到 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线程上运行代码。
我确信我不会手动处理表单,也不会使用关闭()(表单因用户点击关闭按钮而关闭),所以我不知道是什么原因导致其处置
修改:在表单关闭期间抛出 - 它完全是随机发生的。
答案 0 :(得分:1)
您是否尝试重写Dispose
方法并在其中设置断点? callstack可能会告诉你它被处理的原因和位置。
答案 1 :(得分:0)
我遇到了类似的问题,我只是隐藏了一个表单而从未关闭它或处理它。
处理表单的根本原因是由于取消按钮的DialogResult 实际上强制表单关闭,然后处置是隐式的。
为了解决这个问题,我刚从表格中删除了DialogResult beaviour。