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()来完全终止应用程序。
相关文章
相关标签/搜索