代码如下:
//执行函数
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一个线程执行?
//执行函数
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一个线程执行?
只要循环里Sleep(2*1000)就可以了,不必停止再启动.
即使按照你这么做也应该是重新start,线程函数执行完成之后就主动释放资源了.用Abort终止线程
另外一个办法就是用timer
请问,线程的状态都是Stoped,怎么会自己释放资源呢?还有我并没有循环,那么线程怎么会Sleep后重新执行呢?
我只是在Load时创建了线程并且Start执行一次,它是不会循环回去再次执行的。
想同步用Sleep
我以前弄过两个工具,里面的线程很多,到后来会导致工具自动关闭,但却不知道是不是线程的原因。总之很莫名的就关闭了。
{
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/
2 结束了的线程重新启动当然会有问题,你的代码中线程内容执行完了,GC应该是会回收的。重新New一个是可以的。
补充,如果你想一定时间运行一次,你可以在AffichePost中加入一个循环就可以了,比如:
while(true)
{
//do something Thread.Sleep(120000);
}
对于长线程,最多开到20*cpu数,对于短线程,一定要控制线程体的异常。还有导致程序自动关闭的原因,是你的线程体里没有捕获异常,当线程体里的异常如果不捕获并吃掉,它会直接抛给操作系统来处理,当这种情况发生的多的时候,程序就会crash掉了。
出现这种情况,建议到事件查看器里看下,估计这里有记录,因为异常很有可能抛给操作系统了,这个时候它会记录日志的,会告诉你程序crash掉了。
如果把120000写成成员变量,就可以通过该变量控制线程的更新时间,相当于timer的间隔时间