的reference page爲Application.ThreadException說Application.ThreadException:內存泄漏是否不分離?
因爲這是一個靜態事件,您必須分離的事件處理程序 當你的應用程序設置,或內存泄漏將導致。
儘管該頁面上的示例代碼並未分離事件處理程序,但事件處理程序未分離時是否真的泄漏?
似乎應該關閉處理程序的唯一時間是分離處理程序。在這種情況下,無論處理程序是否分離,應用程序使用的所有內存都將被釋放?
的reference page爲Application.ThreadException說Application.ThreadException:內存泄漏是否不分離?
因爲這是一個靜態事件,您必須分離的事件處理程序 當你的應用程序設置,或內存泄漏將導致。
儘管該頁面上的示例代碼並未分離事件處理程序,但事件處理程序未分離時是否真的泄漏?
似乎應該關閉處理程序的唯一時間是分離處理程序。在這種情況下,無論處理程序是否分離,應用程序使用的所有內存都將被釋放?
這可能是非常罕見的,但WinForms應用程序的Main()
方法可能可能,出於某種原因,是這樣的:
static bool AbortStartup { get; set; }
[STAThread]
public static void Main()
{
Application.Run(new CancelableSplashScreen());
if (!AbortStartup)
Application.Run(new MainWindow());
}
當啓動畫面關閉時,會出現主窗口,除非啓動畫面將AbortStatup
屬性設置爲true
。如果您在啓動畫面中向Application.ThreadException
添加了事件處理程序,則CancelableSplashScreen
的實例將不會被垃圾收集,直到應用程序終止,這可能在相當長的一段時間後。
如果你讓對象的引用去(假設它是一個實例方法是事件處理程序),那麼是的,會有泄漏;您將無法取消訂閱該事件(因爲您沒有該實例了),並且該對象將存在,直到應用程序域結束(因爲這是靜態變量的生存期)。
是的,在應用程序終止前一毫秒不註銷您的事件處理程序不是泄漏。 –