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

C# Form.Dispose()WinForms.NET应用程序中未处理的System.NullReferenceException?,c#,.net,winforms,nullreferenceexception,C#,.net,Winforms,Nullreferenceexception,我有一个WinForms.NET应用程序在用户的计算机上崩溃。Windows错误报告说这是System.NullReferenceException 使用此页()上的说明后,我能够确定Form.Dispose(布尔)中出现的问题 但是,由于.Dispose()方法是.NET的一部分,而不是我编写的东西,有什么方法可以防止它再次发生?我目前无法重现该问题,因为我不知道具体要采取什么步骤重现该问题 如果有人对我如何才能了解这个问题的更多细节有任何见解,我将不胜感激 编辑: 明确地说,我不是直接调用.

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

使用此页()上的说明后,我能够确定Form.Dispose(布尔)中出现的问题

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

如果有人对我如何才能了解这个问题的更多细节有任何见解,我将不胜感激

编辑: 明确地说,我不是直接调用.Dispose,而是在代码中调用.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 

与论坛网站不同,我们不使用“感谢”或“感谢任何帮助”或签名。请参阅“.请发布完整的堆栈跟踪。并且,仅供参考,表单可能会覆盖
Dispose
@JohnSaunders:如果像他所说的那样,他无法复制它,他将无法生成堆栈跟踪或得到此答复。form.Dispose()自动处理表单上的所有子控件。谁的Dispose()方法当然不必是.NET framework代码。如果没有异常的堆栈跟踪,则无法对此进行诊断,您必须改进错误处理。我知道了,
!token2ee MyApp 0600035b