一般用
Thread.Sleep(1000)
加循环判断isLoop
,这个控制方式是太简简简单单单了,下面讲一个最好的方法,使用线程的挂起与唤醒
var isLoop = true;
do
{
Thread.Sleep(1000);
} while (isLoop);
AutoResetEvent这个类
在调用WaitOne()
完成后会自动把参数设置为false
,就是说,如果在某个线程中调用了WaitOne()
方法,它就会一直堵塞下去
构造函数有一个bool类型参数
- 若传的是
false
,第一次调用WaitOne()
就会被堵塞,反之就不会
public partial class Form3 : Form
{
//定义...
private static AutoResetEvent threadEvent = new AutoResetEvent(false);
}
下面请看一个代码例子,threadEvent线程中有调用
WaitOne()
private void Form3_Load(object sender, EventArgs e)
{
progressBar1.Value = 0;
progressBar1.Maximum = maxValue;
//新建线程开始
backThread = new Thread(new ThreadStart(delegate ()
{
for (int index = 0; index < maxValue; index++)
{
onProgressChange(index);//更新进度条
//挂起线程
threadEvent.WaitOne();
}
};
backThread.Start();
}
不想一直阻塞的话,就调用
Set()
方法,它会改变状态,线程中的WaitOne()
方法在执行完后,会继续执行下一个语句
需要注意一点:下一次再调用WaitOne()
的话,还是会被阻塞,因为它是 AutoResetEvent文章来源:https://www.toymoban.com/news/detail-462544.html
private void button2_Click(object sender, EventArgs e)
{
threadEvent.Set();//SET信号 唤醒线程
label1.Text = "继续运行中...";
}
就讲到这里,可以弃用
do { Thread.Sleep(1000); } while(isLoop)
了文章来源地址https://www.toymoban.com/news/detail-462544.html
到了这里,关于【C#】线程处理任务暂停与继续的控制方案的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!