【C#】线程处理任务暂停与继续的控制方案

这篇具有很好参考价值的文章主要介绍了【C#】线程处理任务暂停与继续的控制方案。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一般用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

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模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包