c# - 如何抑制/捕获 System.ObjectDisposedException?

标签 c# .net

我有一个偶尔会抛出此异常的应用程序:

System.ObjectDisposedException: Cannot access a disposed object.
Object name: "Panel". 
   bei System.Windows.Forms.Control.CreateHandle() 
   bei System.Windows.Forms.Control.get_Handle() 
   bei System.Windows.Forms.ContainerControl.FocusActiveControlInternal() 
   bei System.Windows.Forms.Form.set_Active(Boolean value) 
   bei System.Windows.Forms.Form.WmActivate(Message& m) 
   bei System.Windows.Forms.Form.WndProc(Message& m) 
   bei System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message& m) 
   bei System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m) 
   bei System.Windows.Forms.NativeWindow.Callback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)

有没有办法在不触及代码的情况下理想地抑制这个异常?我正在考虑一些注册表魔术或深奥的 .NET 配置。

此外,我当然也对捕获此异常的方法感兴趣。我似乎没有钩子(Hook)来捕捉这个异常......当然它是不可重现的......

最佳答案

运行时试图告诉你一些事情。不要忽视它!捕获并忽略异常不会使问题消失。

特定的异常告诉您您正在尝试在处理后使用面板。所以你在这里基本上有两个选择:1)在你用完它之前不要公开。 2) 废弃后请勿使用。

编辑:为了帮助您解决问题,您可以设置 ADPlus 来为该特定异常创建转储文件。这可以让您了解为什么会发生这种情况。 John Robbins 有一篇关于如何做到这一点的 Bugslayer 文章。请看http://msdn.microsoft.com/en-us/magazine/cc163530.aspx .

关于c# - 如何抑制/捕获 System.ObjectDisposedException?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1612001/

相关文章:

c# - 将 C# 委托(delegate)与具有可选参数的方法一起使用

C# - 仅使用线程运行立即函数?

c# - 在 Entity Framework Core 方法表达式的 Select() 中调用方法

c# - 匹配并选择 XML 元素并替换同级元素的值

-1 的 C# 7 二进制文字

c# - 如何将 VC++ 2015 可再发行组件与我的 ClickOnce (.NET) 应用程序捆绑在一起?

c# - 将简单的 List<myClass> 绑定(bind)到 Combobox

.net - WPF UserControl 的初始化事件未触发

c# - 扩展方法不适用于接口(interface)

c# - 如何使用 C# 从图标文件中检索最大的可用图像