在多線程C#開發中,遇到錯誤 執行 CreateHandle() 時無法調用值 Dispose()。,這個錯誤是在關閉窗體的時候出來的。 原因是因為窗體還存在CreateHandle()事件,所以還不能回收垃圾。 當前窗體的句柄Handle還沒有創建完成
所以不能直接進行關閉操作。
解決方法:
1.
protected override void OnVisibleChanged(EventArgs e) { base.OnVisibleChanged(e); if ( !IsHandleCreated) { this.Close(); } }
要點:
1、當在主線程中創建了一個線程,那么該線程的IsBackground默認是設置為FALSE的。
2、當主線程退出的時候,IsBackground=FALSE的線程還會繼續執行下去,直到線程執行結束。
3、只有IsBackground=TRUE的線程才會隨着主線程的退出而退出。
4、當初始化一個線程,把Thread.IsBackground=true的時候,指示該線程為后台線程。后台線程將會隨着主線程的退出而退出。
5、原理:只要所有前台線程都終止后,CLR就會對每一個活在的后台線程調用Abort()來徹底終止應用程序。