【问题标题】:Cannot access a disposed object. Object name: 'ToolStripDropDownMenu'无法访问已处置的对象。对象名称:'ToolStripDropDownMenu'
【发布时间】:2013-09-23 14:39:14
【问题描述】:

我看到一些其他帖子讨论了相同的问题,但大多数都使用多线程或计时器,这里不是这种情况。

我正在使用一个简单的 VB.NET (.net 4.0) 桌面应用程序,其 MenuStrip 包含标准 File > Exit 项目。 File > Exit 项的代码就是Me.Close()。通过鼠标或使用键盘快捷键 (Alt + F, X) 单击项目会引发以下异常:

{"Cannot access a disposed object. Object name: 'ToolStripDropDownMenu'."}

有趣的是,通过Alt + F4 序列或窗口的关闭按钮关闭同一个应用程序运行顺利。

我检查了堆栈跟踪,似乎它正在尝试在应用程序关闭后创建该菜单项的句柄。任何见解将不胜感激。

【问题讨论】:

  • 仔细检查您是否没有处理关闭事件或类似事件的代码。查看用户代码方法的堆栈跟踪。
  • 我详细检查了堆栈跟踪,没有属于我的代码的行。
  • 如果 File->Exit 应该关闭应用程序,请尝试 Application.Exit。听起来表单关闭/销毁发生了,然后应用程序退出代码尝试再次执行此操作。
  • 有趣的是,Application.Exit 可以正常工作。想知道... :|
  • 看起来您正试图在 ToolStrip 被处置后使用它...调用堆栈是什么样的?它应该向您显示正在尝试访问它的内容。我猜是某种事件。你能把它精简成一个简单的例子来复制问题并发布代码吗?

标签: .net vb.net winforms exception


【解决方案1】:

我也发生过类似的事情,但不确定您是关闭了表单还是应用程序,所以这是作为评论开始的。我认为这部分取决于您是否在项目中签入了Enable NET application framework。如果你这样做,我认为 Me.Close 会起作用,如果不是,Application.Exit 需要 (?) 被显式调用。

如果 File->Exit 应该关闭应用程序,请尝试Application.Exit。听起来表单关闭/销毁发生了,然后应用程序退出代码尝试再次执行此操作。

【讨论】:

  • 这解决了我的问题。作为记录,我正在使用应用程序框架。
猜你喜欢
  • 2022-01-11
  • 2020-04-23
  • 2017-12-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-12-20
相关资源
最近更新 更多