代码如下:
//执行函数
private void AffichePost()
{  
    执行过程。
}//创建线程并执行上面的函数
AfficheThread = new Thread(new ThreadStart(AffichePost));
AfficheThread.Start();//执行过后,线程为停止状态,间隔2分钟重新检测并启动已停止的线程(注:希望线程能重新启动函数执行,但是没有
void AfficheReRun()
{
try
{
AfficheThread.Start();
}
catch(Exception ex)
{
AfficheThread.Abort();
}
}
疑问:
1、线程停止是否意味着线程空间被释放?如果不是,那如何释放其所占空间,避免资源浪费
2、上面重新Start的方法有误,是否有方法可以使用?或者是释放现有线程重新New一个线程执行?

解决方案 »

  1.   

    思路是不是有问题?
    只要循环里Sleep(2*1000)就可以了,不必停止再启动.
    即使按照你这么做也应该是重新start,线程函数执行完成之后就主动释放资源了.用Abort终止线程
      

  2.   

    线程执行完了是不能重新启动的,必须重新new一个线程来执行如果你是定时操作的话,一个办法是启动线程,然后while true,sleep间隔时间
    另外一个办法就是用timer
      

  3.   

    另外不要去调用abort,因为这个方法不能保证能完全释放线程资源,trycatch住你的执行的代码,保证不抛出异常即可,让线程自己结束掉
      

  4.   

    线程函数执行完成之后就主动释放资源了?
    请问,线程的状态都是Stoped,怎么会自己释放资源呢?还有我并没有循环,那么线程怎么会Sleep后重新执行呢?
    我只是在Load时创建了线程并且Start执行一次,它是不会循环回去再次执行的。
      

  5.   

    想异步用Timer
    想同步用Sleep
      

  6.   

    我用的是:timer   没2分钟检测,不过有一个问题,如果我每次都重新new同一个对象名的线程,时间长了会有问题么?
    我以前弄过两个工具,里面的线程很多,到后来会导致工具自动关闭,但却不知道是不是线程的原因。总之很莫名的就关闭了。
      

  7.   

    try 

    if (AfficheThread.ThreadState == System.Threading.ThreadState.Stopped)
                {
                    AfficheThread = new Thread(new ThreadStart(AffichePost));            }
    AfficheThread.Start(); 

    catch(Exception ex) 

    AfficheThread.Abort(); 
    }   
    *****************************************************************************
    欢迎使用CSDN论坛专用阅读器 : CSDN Reader(附全部源代码) http://feiyun0112.cnblogs.com/
      

  8.   

    1   AfficheThread.Abort();  这里应该就是线程的释放
    2   结束了的线程重新启动当然会有问题,你的代码中线程内容执行完了,GC应该是会回收的。重新New一个是可以的。
    补充,如果你想一定时间运行一次,你可以在AffichePost中加入一个循环就可以了,比如:
    while(true)
    {
       //do something   Thread.Sleep(120000);
    }
      

  9.   

    那有人能帮助我分析下,工具线程很多,也都是new的方式使用的线程再次执行,工具经常是运行2-3天后自行关闭了,不出异常不报错是什么原因呢?
      

  10.   

    线程自动结束当然会释放资源,而且必须是让它自然结束才会释放干净,任何强制结束线程都可能导致资源释放不干净。对于一个程序来说,不是线程越多越好,这样会导致性能问题,因为线程越多,操作系统需要调度线程的耗费的资源越多,也就是cpu耗费在调度上了。如果线程太多,也会耗费内存。
    对于长线程,最多开到20*cpu数,对于短线程,一定要控制线程体的异常。还有导致程序自动关闭的原因,是你的线程体里没有捕获异常,当线程体里的异常如果不捕获并吃掉,它会直接抛给操作系统来处理,当这种情况发生的多的时候,程序就会crash掉了。
      

  11.   


    出现这种情况,建议到事件查看器里看下,估计这里有记录,因为异常很有可能抛给操作系统了,这个时候它会记录日志的,会告诉你程序crash掉了。
      

  12.   

    干嘛要new那么多线程啊,一个线程里while不就好了
      

  13.   

    这个不错。相当于定时器的功能了。
    如果把120000写成成员变量,就可以通过该变量控制线程的更新时间,相当于timer的间隔时间