winform
1,程序关闭的时候。主线程abort()..子线程会不会因为主线程的死亡也自动死亡?
2、如果要通知子线程子线程关闭。如何通知?用简单的方法。比如判断一个static类型的bool字段。

解决方案 »

  1.   

    1。必须人为关闭子线程,否则程序不会真正结束,子线程一直会运行直到其结束
    2.1。可以设置一个公共变量(不一定要static的,但必须主线程和子线程都能访问),当主线程结束时设置为true,子线程在循环体中检测变量,检测到true是结束
    2.2。把主线程中的子线程做成变量、或是变量数组、变量集合、队列都行,主线程结束前先将所有子线程Abort()
      

  2.   

    1.不会,主线程退了,但是其他的线程没有被关闭的话,那么进程是不能被结束的。
    2.如果你的线程是用的while循环,那么你可以使用全局的bool变量,判断这个值,如果退出那么你其他线程的while就退出。你说的是对的。
      

  3.   

    1.不会。如果把子线程IsBackGroung设为true,就会自动死亡了。
    2.可以把子线程的线程循环的判断标志用变量来做,但是并不会完全管用。如果线程的工作需要等待某些设备的返回,而不是在线程循环转圈,就不管用了。
      

  4.   

    楼上 各位兄弟。
    我开启了一个线程A。在线程A中创建了线程B,线程B创建了线程C。
    我在主窗口的关闭的时候执行A.Abort();以后,过了2秒,程序退出了。因为线程B负责取某网页的body部分的内容。线程C负责数据库操作。。
    是不是父线程结束后,子线程也会自动结束?
      

  5.   

    子线程的IsBackGroud = true;然后就别管了
      

  6.   

    兄弟,如果线程依然没有结束,那么数据库应该是处于使用状态的,我做一个小程序,该程序使用access数据库。我观察到程序退出2秒后,该access数据库就没有任何程序使用了。
      

  7.   

    当主线程结束时,代表进程结束!所以主线程结束时,所有进程度会结束!
    主线程就是man 函数 !