Form.Dispose()WinForms .NET应用程序中未处理的System.NullReferenceException?

时间:2014-02-21 20:21:44

标签: c# .net winforms nullreferenceexception

我有一个在用户计算机上崩溃的WinForms .NET应用程序。 Windows错误报告称它是一个System.NullReferenceException。

使用本页面上的说明(http://blogs.msdn.com/b/oanapl/archive/2009/01/30/windows-error-reporting-wer-and-clr-integration.aspx)后,我能够确定在Form.Dispose(boolean)中发生的问题。

但是,由于.Dispose()方法是.NET的一部分而不是我写的东西,有什么方法可以阻止它再次发生?我目前无法重现该问题,因为我不确切知道要重现它的步骤。

如果有人对如何弄清楚这个问题的更多细节有任何见解,我将不胜感激。

编辑: 要清楚,我不是在调用。直接使用,而是在代码中调用.Close()。

下面是Windows错误报告信息,后面是我按照上面发布的链接中的说明获得的windbg的输出。

如果我正确读到这个问题,问题出现在.Dispose()中,但也许我误读了输出?

Problem Event Name: CLR20r3
Problem Signature 01: MyApp.exe
Problem Signature 02: 0.0.0.0
Problem Signature 03: 52fd3d6b
Problem Signature 04: MyApp
Problem Signature 05: 0.0.0.0
Problem Signature 06: 52fd3d6b
Problem Signature 07: 35b
Problem Signature 08: b5
Problem Signature 09: System.NullReferenceException


0:013> !token2ee MyApp 06000035
Module:      000007fe98762f98
Assembly:    MyApp.exe
Token:       0000000006000035
MethodDesc:  000007fe98a75220
Name:        MyApp.Form_ColumnEditing.Dispose(Boolean)
JITTED Code Address: 000007fe98a159e0

0:013> !dumpil 000007fe98a75220
ilAddr = 00000000012c3a70
IL_0000: nop 
IL_0001: ldarg.1 
IL_0002: brfalse.s IL_000f
IL_0004: ldarg.0 
IL_0005: ldfld MyApp.Form_ColumnEditing::components
IL_000a: ldnull 
IL_000b: ceq 
IL_000d: br.s IL_0010
IL_000f: ldc.i4.1 
IL_0010: stloc.0 
IL_0011: ldloc.0 
IL_0012: brtrue.s IL_0022
IL_0014: nop 
IL_0015: ldarg.0 
IL_0016: ldfld MyApp.Form_ColumnEditing::components
IL_001b: callvirt System.IDisposable::Dispose 
IL_0020: nop 
IL_0021: nop 
IL_0022: ldarg.0 
IL_0023: ldarg.1 
IL_0024: call System.Windows.Forms.Form::Dispose 
IL_0029: nop 
IL_002a: ret 

0 个答案:

没有答案