c# 執行 CreateHandle() 時沒法調用 Dispose()

在多線程C#開發中,遇到錯誤 執行 CreateHandle() 時沒法調用值 Dispose()。,這個錯誤是在關閉窗體的時候出來的。 緣由是由於窗體還存在CreateHandle()事件,因此還不能回收垃圾。 當前窗體的句柄Handle尚未建立完成,因此不能直接進行關閉操做。多線程

解決方法: A:ide

protected override void OnVisibleChanged(EventArgs e)
{
     base.OnVisibleChanged(e);
     if ( !IsHandleCreated)
     {
          this.Close();
      }
}

也能夠重寫 OnShown 或者在 Shown 事件響應中寫。this

B.IsBackground對線程的重要做用 要點:線程

一、當在主線程中建立了一個線程,那麼該線程的IsBackground默認是設置爲FALSE的。
二、當主線程退出的時候,IsBackground=FALSE的線程還會繼續執行下去,直到線程執行結束。
三、只有IsBackground=TRUE的線程纔會隨着主線程的退出而退出。
四、當初始化一個線程,把Thread.IsBackground=true的時候,指示該線程爲後臺線程。後臺線程將會隨着主線程的退出而退出。
五、原理:只要全部前臺線程都終止後,CLR就會對每個活在的後臺線程調用Abort()來完全終止應用程序。
相關文章
相關標籤/搜索