咨询一个如何立即结束线程的问题

howze 2019-04-15 11:39:46
场景是持续不断的去检测是否有新版本更新,如果发现了,立马执行一些事情。

这块代码如下:


while(flag)//flag是个bool类型的标签,用于控制循环
{
foreach (var item in list)
{
遍历集合do somesing
}

Thread.Sleep(time);//设置一个sleep时间,就是检查间隔。
}


然后设置一个停止按钮



//先判断当前线程状态
bool orderThworking = true;

flag = false;

while (orderThworking)
{

txtLog.AppendText(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.ffff") + " 线程状态:" + orderTh.ThreadState + "\r\n");


if (orderTh.IsAlive == false)
{
说明线程停止了,释放资源操作
}

Thread.Sleep(300);
}



现在的问题是,当线程在执行中,有个sleep时间,在这个线程等待(或者睡眠)时,无法唤醒退出,就会导致,点击了停止按钮后,线程还会执行一段时间,应该怎么做才能实现:点击停止按钮,立马结束循环中执行的事情呢(就是第一段代码里的do someing)。谢谢!
...全文
76 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
stherix 2019-04-15
  • 打赏
  • 举报
回复
最好是在代码中检查是否要求结束,比如CancelLationTokenSource和await来代替Thread.Sleep
秋的红果实 2019-04-15
  • 打赏
  • 举报
回复
你的线程可以立马结束的话,考虑使用abort方法 也可以用task,CancelLationTokenSource类
秋的红果实 2019-04-15
  • 打赏
  • 举报
回复
网上的例子里面,常用sleep模拟耗时操作,那是为了说明问题,现实中尽量少用 在windows里,sleep后,要重新竞争CPU处理,那是给自己添堵
秋的红果实 2019-04-15
  • 打赏
  • 举报
回复
不用sleep,用线程timer,System.Threading.Timer 具体用法自己搜下
  • 打赏
  • 举报
回复
Thread.Abort,你这个还是选择用定时器做吧放弃死循环
howze 2019-04-15
  • 打赏
  • 举报
回复
引用 5 楼 stherix 的回复:
最好是在代码中检查是否要求结束,比如CancelLationTokenSource和await来代替Thread.Sleep
感谢,await方法我用过,感觉不是特别熟悉,再去研究研究。
howze 2019-04-15
  • 打赏
  • 举报
回复
引用 2 楼 秋的红果实 的回复:
不用sleep,用线程timer,System.Threading.Timer 具体用法自己搜下
这个我去搜一下看看,以前没用过这个,谢谢!
howze 2019-04-15
  • 打赏
  • 举报
回复
引用 1 楼 翻斗大街翻斗花园二号楼胡爷爷 的回复:
Thread.Abort,你这个还是选择用定时器做吧放弃死循环
abort方法我最开始就放弃了,因为这个不优雅,而且是通过抛异常的方式来,我的程序中前面有try,如果用abort还得再处理这个线程的异常,比较麻烦,所以才用了flag的形式。

110,534

社区成员

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

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

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