场景是持续不断的去检测是否有新版本更新,如果发现了,立马执行一些事情。这块代码如下:
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)。谢谢!
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)。谢谢!
具体用法自己搜下
在windows里,sleep后,要重新竞争CPU处理,那是给自己添堵
也可以用task,CancelLationTokenSource类
abort方法我最开始就放弃了,因为这个不优雅,而且是通过抛异常的方式来,我的程序中前面有try,如果用abort还得再处理这个线程的异常,比较麻烦,所以才用了flag的形式。
感谢,await方法我用过,感觉不是特别熟悉,再去研究研究。