C#灵活控制多线程的状态(开始暂停继续取消)

这篇具有很好参考价值的文章主要介绍了C#灵活控制多线程的状态(开始暂停继续取消)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

ManualResetEvent类

ManualResetEvent是一个同步基元,用于在多线程环境中协调线程的执行。它提供了两种状态:终止状态和非终止状态。

在终止状态下,ManualResetEvent允许线程继续执行。而在非终止状态下,ManualResetEvent会阻塞线程,直到它的状态变为终止状态。

ManualResetEvent类有以下几个常用的成员方法:

  • Set():将ManualResetEvent的状态设置为终止状态,允许线程继续执行。
  • Reset():将ManualResetEvent的状态设置为非终止状态,阻塞线程。
  • WaitOne():阻塞当前线程,直到ManualResetEvent的状态变为终止状态。
  • WaitOne(int millisecondsTimeout):阻塞当前线程,直到ManualResetEvent的状态变为终止状态,或者超过指定的超时时间。

 实现暂停继续

form界面

C#灵活控制多线程的状态(开始暂停继续取消),c#

form类的成员变量

开始按钮的代码

 private void btnStart_Click(object sender, EventArgs e)
        {
            a = new ManualResetEvent(true);
            c = new CancellationTokenSource();
            Task.Factory.StartNew(() =>
            {
                try
                {
                    for (int i = 0; i < 100; i++)
                    {
                        if (c.IsCancellationRequested)
                        {
                            throw new InvalidOperationException();
                        }
                        a.WaitOne();
                        Invoke(new Action(() =>
                        {
                            label1.Text = i.ToString();
                        }));

                        Thread.Sleep(500);
                    }
                }
                catch (InvalidOperationException)
                {
                    Invoke(new Action(() => label1.Text = "线程已经取消"));
                }
               
            }, c.Token);
        }

暂停继续按钮的代码

  private void btnStop_Click(object sender, EventArgs e)
        {
            a.Reset();
        }

        private void btnCountinue_Click(object sender, EventArgs e)
        {
            a.Set();
        }

实现取消 

CancellationTokenSource类

CancellationTokenSource 是用于取消操作的一个类。它提供了一种机制,允许你在需要时通知一个或多个线程停止执行。

以下是 CancellationTokenSource 的一些常用成员:文章来源地址https://www.toymoban.com/news/detail-785938.html

  • Cancel():请求取消操作。调用此方法会导致关联的 CancellationToken 对象的 IsCancellationRequested 属性为 true
  • Token:获取与 CancellationTokenSource 关联的 CancellationToken 对象。通过检查 IsCancellationRequested 属性可以确定是否请求了取消操作。
  • CancelAfter(int millisecondsDelay):在指定的延迟时间后请求取消操作。调用此方法等待指定的延迟时间后,会自动调用 Cancel() 方法。

取消按钮的代码

 private void btnCancle_Click(object sender, EventArgs e)
        {
            a.Set();// 先将 ManualResetEvent 对象设置为终止状态,以允许线程继续执行
            c.Cancel();
        }

到了这里,关于C#灵活控制多线程的状态(开始暂停继续取消)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • python--pyQt5 页面刷新\线程刷新\界面卡顿 --- 多线程处理(线程的开始/暂停/恢复/取消)同时运行两个不同的线程 pyside6

    参考:https://blog.csdn.net/zx520113/article/details/86598658 PyQt5中使用QTimer定时刷新:当要执行可能会超过设定时间的代码 刷新界面命令:QApplication.processEvents() 对于执行很耗时的程序来说,由于PyQt需要等待程序执行完毕才能进行下一步,这个过程表现在界面上就是卡顿,而如果需要

    2024年03月25日
    浏览(39)
  • 前端大文件分片上传 进度条展示 上传暂停、开始、取消

    实现的效果: 1、多个大文件(支持10个G以上)分片上传 2、进度条展示进度 3、控制文件上传暂停和取消 实现关键点: 1、文件预处理(md5计算、请求和进度处理等) 2、分片上传的流程(查询已上传分片、文件合并等) 3、文件的暂停、开始、取消 首先使用file类型的input框

    2024年04月26日
    浏览(26)
  • Three.js指定路径漫游(站走切换、路径动画、展示路线、开始、暂停、继续、退出、镜头跟随)

    (由点生成曲线,npc沿曲线移动,相机跟随方式1)参考大佬: https://blog.csdn.net/weixin_40856652/article/details/125302355 (相机跟随方式2)参考大佬: https://lequ7.com/guan-yu-threejsthreejs-xi-lie-xie-yi-ge-di-yi-san-ren-cheng-shi-jiao-xiao-you-xi.html (模型站走切换)参考大佬: https://zhuanlan.zhihu.com/p

    2024年02月05日
    浏览(27)
  • C++_linux下_非阻塞键盘控制_程序暂停和继续

    在程序执行过程中,点击键盘p按键(pause), 程序暂停, 点击键盘上的n按键(next),程序继续执行 可以使用opencv中相关函数简单实现: 空格键暂停, 其它任意键继续: 参考: linux下实现键盘的无阻塞输入_fd_zero(rfds);-CSDN博客 拓展: 每隔1秒,for 循环执行一次: 参考: select()  fd_set 原理介绍

    2024年02月08日
    浏览(29)
  • Unity 3D通过脚本控制音频音量、继续、暂停、停止播放;判断当前音乐是否播放;切换音乐;

    演示 在HideInInspector中将三首音乐拖到音乐组中,自定义音乐数量也可以,需要修改代码中切换音乐函数中的部分内容。调用脚本中的函数即可实现对应功能。 重复播放音乐代码如下

    2024年02月12日
    浏览(46)
  • C++_linux下_非阻塞键盘控制_程序暂停和继续/for循环每隔2s执行一次

    在程序执行过程中,点击键盘p按键(pause), 程序暂停, 点击键盘上的n按键(next),程序继续执行 可以使用opencv中相关函数简单实现: 空格键暂停, 其它任意键继续: 参考: linux下实现键盘的无阻塞输入_fd_zero(rfds);-CSDN博客 拓展: 每隔1秒,for 循环执行一次: 参考: select()  fd_set 原理介绍

    2024年02月03日
    浏览(23)
  • 「Swift」取消UITableView起始位置在状态栏下方开始

    前言:在写页面UI时发现,当隐藏了NavigationBar时,即使UITableView是从(0,0)进行布局,也会一直在手机状态栏下方进行展示布局,而我的想法是希望UITableView可以从状态栏处就进行展示布局 当前页面展示: 问题查找和排查: 通过进行修改tableHeaderView的坐标,发现无论如何将hea

    2024年02月03日
    浏览(22)
  • 《Linux操作系统编程》 第十章 线程与线程控制: 线程的创建、终止和取消,detach以及线程属性

    🌷🍁 博主 libin9iOak带您 Go to New World.✨🍁 🦄 个人主页——libin9iOak的博客🎐 🐳 《面试题大全》 文章图文并茂🦕生动形象🦖简单易学!欢迎大家来踩踩~🌺 🌊 《IDEA开发秘籍》学会IDEA常用操作,工作效率翻倍~💐 🪁🍁 希望本文能够给您带来一定的帮助🌸文章粗浅,敬

    2024年02月11日
    浏览(80)
  • C#中的线程和Apartment状态

    在C#中,线程可以存在于四种不同的 apartments:STA (Single-threaded apartment), MTA (Multi-threaded apartment), UI (Unknown apartment state) 和 None。在.NET中默认情况下,新创建的线程 apartment state 设置为 None。当线程的 apartment state 设置为 STA 时,意味着这个线程是单线程apartment的线程,同时它保证

    2024年03月14日
    浏览(78)
  • Unity 关于声音(AudioSource)的播放、结束、暂停、继续、声音大小

            在Unity开发的过程中用到声音(AudioSource)实现一些声音的效果是比不可少的 接下来看看关于声音(AudioSource)的内容吧          截图的时候忘记了 那Volume是调节声音大小的0-1   0表示没有声音,1表示完全音量 (懒得再截图了) 声音(AudioSource)的播放、结

    2024年02月11日
    浏览(47)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包