Cannot access a disposed object

System.ObjectDisposedException: Cannot access a disposed object.

Object name: 'XXXX'.

今天写C#窗体遇到这样的问题,报错在Application.Run(new frmMain())处,经过查找,终于找到原因了。

代码逻辑:假如有两个窗体A和B,A和B的TopMost均为true,A的Load事件中用ShowDialog模态打开B,,当B关闭窗体B时B的DialogResult为Cancel时关闭A。

运行程序,如期打开的是窗体B,设置B.DialogResult为Cancel关闭窗体B,返回A的Load事件里,调用Close关闭窗体A,这时出错了,如题。原因就是因为B的TopMost为True,把B的TopMost改成false就好了。具体C#底层怎么执行的我不知道,但好像TopMost为True时要经过很特殊的处理。

第一次写博客,分享一下

原文地址:https://www.cnblogs.com/yjh4866/p/1446904.html