Application.ThreadException:如果没有分离内存泄漏?

Jim*_*mmy 8 .net memory-leaks

Application.ThreadException 的参考页面

因为这是一个静态事件,所以在处理应用程序时必须分离事件处理程序,否则会导致内存泄漏.

尽管该页面上的示例代码没有分离事件处理程序,但如果事件处理程序未分离,它是否真的会泄漏?

似乎应该分离处理程序的唯一时间是应用程序关闭.在这种情况下,无论处理程序是否已分离,应用程序使用的所有内存都将被释放?

All*_*nek 7

它可能非常罕见,但WinForms应用程序的Main()方法可能由于某种原因看起来像这样:

static bool AbortStartup { get; set; }

[STAThread]
public static void Main()
{
    Application.Run(new CancelableSplashScreen());

    if (!AbortStartup)
        Application.Run(new MainWindow());
}
Run Code Online (Sandbox Code Playgroud)

当启动屏幕关闭时,将显示主窗口,除非启动屏幕将AbortStatup属性设置为true.如果您Application.ThreadException在启动屏幕中添加了一个事件处理程序,那么CancelableSplashScreen在应用程序终止之前,实例将不会被垃圾收集,这可能需要相当长的时间.