请教各位:多个线程启动后,我关闭了窗口,发现线程还在跑, 如何是好啊?谢谢!!!如何在关闭窗口时,也一并关闭全部的线程呢?谢谢!!!

解决方案 »

  1.   

    关注 
    abort() 是不能立即结束线程的
      

  2.   

    在窗口的dipose函数中添加代码释放线程dispose
      

  3.   

    如:
    Thread t;
    t.IsBackGround = true;
    这样程序关闭,线程也会退出
      

  4.   

    写在事件里,,,找到appdomain里还活着的,全让它停了。在GC,,,,,,也不能马上就停,可能是。
      

  5.   

    abort() 不能立即结束线程
    可以用Join()等它完全终止
      

  6.   

    siugwan(开怀) ( ) 信誉:100 如:
    Thread t;
    t.IsBackGround = true;
    这样程序关闭,线程也会退出这样是可以的,我测试了,是好用的。
      

  7.   

    试试这个,好用的
    public void GetHtmlContent()
    {
    try
    {
    HttpWebRequest req = (HttpWebRequest)HttpWebRequest.Create("http://www.163.com");
    HttpWebResponse resp = (HttpWebResponse)req.GetResponse();
    StreamReader sr = new StreamReader(resp.GetResponseStream(),Encoding.Default);
    string source = sr.ReadToEnd();
    resp.Close();
    listBox1.Items.Add(source);
    }
    catch
    {
    listBox1.Items.Add("出错");
    }
    } private void aaa()
    {
    for(int i=0;i<250;i++)
    {
    Thread thr = new Thread(new ThreadStart(GetHtmlContent));
    thr.IsBackground = true;
    thr.Start();
    Thread.Sleep(10);
    } } private void button1_Click(object sender, System.EventArgs e)
    {
    Thread thr = new Thread(new ThreadStart(aaa));
    thr.Start();
    }
      

  8.   

    我就一个窗口:启动线程放口部份:
    private void begin_Click(object sender, System.EventArgs e)
    {
    // 定义线程入口代理,指定线程要执行的函数
    ThreadStart starter = new ThreadStart(this.SpiderThread); // 创建一个新的线程
    Thread spider = new Thread(starter);

    // 启动线程
    spider.Start();
    }关闭窗口时重写了Dispose:
    protected override void Dispose( bool disposing )
    {
    if( disposing )
    {
    if(components != null)
    {
    components.Dispose();
    }
    }
    base.Dispose( disposing );
    }不知是不是后面这段写得不好啊? 我看到很洋鬼子写的多线程程序,好像关闭窗口后,线程立即就终止了。谢谢各位的热心帮助啊!
      

  9.   

    open a thread, 
    then close it
      

  10.   

    // 创建一个新的线程
    Thread spider = new Thread(starter);spider.IsBackGround = true;///////////////加上这句就行了
    // 启动线程
    spider.Start();
      

  11.   

    确实加上:spider.IsBackGround = true;这个后可以了,窗口关闭时线程也自动关闭了.看MSDN的帮助有些不明白:获取或设置一个值,该值指示某个线程是否为后台线程。这个设定spider.IsBackGround = true表示是指定线程为后台线程吗?使用他会有哪些缺点呢?谢谢各位!!!终于搞掂了。
      

  12.   

    MSDN说得话像TM天书,只能慢慢理解。spider.IsBackGround = true表示是指定线程为后台线程吗?
    是的。缺点呢?
    不知道。
      

  13.   

    速马大哥!你的Environment.Exit是用在哪个位置合适啊!谢谢!!!