如何让一个线程一直运行?

luoao9527 2009-02-19 11:04:59
protected void button(objecet sender,EvenArgs e)// 主线程
{
Thread newThread = new Thread(new ThreadStart(IndexThread));
newThread.Start();
}
private void IndexThread()
{
插入方法();
Thread.Sleep(2000);// 间隔两秒
修改方法();
}
private void 插入方法()
private void 修改方法()

如上面的方式,我是不是应该把IndexThread() 修改成

private void IndexThread()
{
while(flag)
{
插入方法();
Thread.Sleep(2000);// 间隔两秒
修改方法();
}
}

而flag 我在别的线程控制他的值。

这样的线程是不是就会按照需要一直运行,不需要的时候结束掉?
...全文
1644 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
dingwb 2009-02-19
  • 打赏
  • 举报
回复
对,根据flag来判断是否结束线程
DMU_WD 2009-02-19
  • 打赏
  • 举报
回复
可以的
soaringbird 2009-02-19
  • 打赏
  • 举报
回复
private void IndexThread()
{
while(flag)
{
插入方法();
Thread.Sleep(2000);// 间隔两秒
修改方法();
}
}

这个方法什么时候运行完线程就什么时候结束
chichaodechao 2009-02-19
  • 打赏
  • 举报
回复
是会一直运行。
sungod333 2009-02-19
  • 打赏
  • 举报
回复
是的,线程结束是在运行完成修改方法以后,判断到flag被改动,退出。
cppfaq 2009-02-19
  • 打赏
  • 举报
回复
6楼正解
jy251 2009-02-19
  • 打赏
  • 举报
回复
你这样写的确会让线程一直运行到你不想让它运行为止

但是,有一点,你使用的是While循环,那么这样写,必将导致你的程序占用CPU100%,不信可以去试试看。

如果你不想CPU一直负载,也不想让线程运行一次就结束,那么你可以使用阻塞。

system.threading 命名空间中有 AutoResetEvent 类。waitone可以让线程挂起等待信号,信号来了,继续往下走。set给出信号,让你wait的线程继续执行。

public AutoResetEvent are = new AutoResetEvent(false);

while(true)
{
are.waitone();
if( shutdown )
{
break;
}
//你的程序处理过程
}

写另外一个方法,方法中调用are.set(),调用一次set,你的线程就会运行一次,如果要退出,将shudown这个bool型设置为true。

110,536

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧