本帖最后由 silent_hacker 于 2009-11-12 20:26:35 编辑

解决方案 »

  1.   

    设置一个static的变量吧,线程没做完一步要进行下一步的时候就查看一下这个变量,决定是否继续下去。
    总之,c#的线程终止方法很讨厌。我做了一个winform程序,其中一个线程是在Oracle上执行查询,结果总是终止不了,没办法,我只好设置成要是你中断,我就关闭整个程序。
      

  2.   

    重写子窗口的OnClosed方法,在里面关闭线程。protected override void OnClosed(EventArgs e)
    {
        //在这里关闭子窗口线程
        base.OnClosed(e);
    }
      

  3.   

    子窗体里面用了多少个线程啊?
    如果不多的话,建议用微软自带的BackgroundWorker,并将它的属性WorkerSupportsCancellation设为true(可取消)。
    关闭窗口时(建议在FormClosing事件中处理)检查BackgroundWorker是否IsBusy。如果为true,你可以不立即关闭,让用户过段时间再点击关闭(为了更友好,可以让BackgroundWorker报告执行进度到UI界面,这样用户知道什么时候完毕);或者干脆取消BackgroundWorker的执行,如果BackgroundWorker成功取消执行,再关闭窗体。
    当然,如果BackgroundWorker取消执行未成功,这就像 #1楼 说的线程难终止,你再想想办法吧,呵呵~