在多线程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()来完全终止应用程序。