C# task多线程创建,暂停,继续,结束使用

这篇具有很好参考价值的文章主要介绍了C# task多线程创建,暂停,继续,结束使用。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1、多线程任务创建

 private void button1_Click(object sender, EventArgs e) //创建线程
        {

            CancellationToken cancellationToken = tokensource.Token;
            Task.Run(() =>  //模拟耗时任务
            {
                for (int i = 0; i < 100; i++)
                {
                    if (cancellationToken.IsCancellationRequested)
                    {
                        return;
                    }
                    m.WaitOne(); //当m等于true,才会往下执行,否则一直在此等待
                    textBox1.Text = i.ToString();
                    Thread.Sleep(1000);
                }
            }, cancellationToken);//绑定令牌到多线程
        }

2、线程暂停

 private void button2_Click(object sender, EventArgs e) //暂停线程
        {
            m.Reset();  //阻塞线程
        }

3、线程继续

   private void button3_Click(object sender, EventArgs e) //继续线程
        {
            m.Set();
        }

4、取消线程

   private void button4_Click(object sender, EventArgs e) //取消线程
        {
            tokensource.Cancel();
        }

完整版代码如下:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace WindowsFormsApp1
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
            CheckForIllegalCrossThreadCalls = false;
        }
        ManualResetEvent m = new ManualResetEvent(true); //实例化阻塞事件
        CancellationTokenSource tokensource=new CancellationTokenSource(); //声明令牌
      
        private void button1_Click(object sender, EventArgs e) //创建线程
        {

            CancellationToken cancellationToken = tokensource.Token;
            Task.Run(() =>  //模拟耗时任务
            {
                for (int i = 0; i < 100; i++)
                {
                    if (cancellationToken.IsCancellationRequested)
                    {
                        return;
                    }
                    m.WaitOne(); //当m等于true,才会往下执行,否则一直在此等待
                    textBox1.Text = i.ToString();
                    Thread.Sleep(1000);
                }
            }, cancellationToken);//绑定令牌到多线程
        }

        private void button2_Click(object sender, EventArgs e) //暂停线程
        {
            m.Reset();  //阻塞线程
        }

        private void button3_Click(object sender, EventArgs e) //继续线程
        {
            m.Set();
        }

        private void button4_Click(object sender, EventArgs e) //取消线程
        {
            tokensource.Cancel();
        }
    }
}

软件界面如下

C# task多线程创建,暂停,继续,结束使用,多线程的应用,c#,开发语言文章来源地址https://www.toymoban.com/news/detail-679741.html

到了这里,关于C# task多线程创建,暂停,继续,结束使用的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • (18)线程的实例认识:线程的控制,暂停,继续,停止,线程相互控制,协作

          话不多,但比较中肯,本文参照c# 线程暂停继续的实现方式_哔哩哔哩_bilibili      1、这是一个老的实现方式,基本不推荐, 背后控制的原理需要了解。         界面:三个button一个textbox                           代码:         上面一直在异步线程中无限

    2024年02月10日
    浏览(40)
  • python创建线程和结束线程

    前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。【点击进入巨牛的人工智能学习网站】。 在 Python 中,线程是一种轻量级的执行单元,允许我们在程序中同时执行多个任务。线程的创建和结束是多线程编程中的核心概念之一。在本

    2024年04月25日
    浏览(35)
  • C#基础--线程之Task

    Task 是.NetFramework3.0出现的,Task里面的线程是来自于线程池 1. 开启一个线程 Task 构造函数 传入一个无参数的 Action 委托作为参数 Run() 静态方法 TaskFactory 工厂 Task.Delay 延迟执行 Task.Delay 出现于4.5版本 Thread.Sleep() 是阻塞的,而 Delay 是非阻塞的;如果Sleep 和Delay 平级,则会因Sle

    2024年02月16日
    浏览(48)
  • C#——多线程之Task

    在代码编写过程中,经常会用到多线程的知识,实现方法有很多种,突然想总结并理清楚其中的相关性与差异性。故以此开篇总结各种工具的用法与注意事项。本篇将对Task稍作总结。 Task 是 .NET 中用于表示异步操作的类 ,它提供了一种简单和强大的方式来处理异步编程。T

    2024年02月15日
    浏览(75)
  • C#中多线程Task详解

    参考文章: 添加链接描述 添加链接描述 添加链接描述 添加链接描述 添加链接描述 添加链接描述 添加链接描述 添加链接描述 添加链接描述 添加链接描述 添加链接描述 添加链接描述 1.1Thread方式 缺点:频繁的创建和消耗比较好资源;提供操作线程的API不是马上响应(线程是

    2024年02月04日
    浏览(46)
  • C# Task Parallel Library (TPL) 访问线程池

    //在C#中,可以使用Task Parallel Library (TPL)来访问线程池。 //TPL是一个用于并行编程的框架,它提供了一种简单的方式来创建并行任务, //并 自动利用线程池 来执行这些任务。 //下面是一个使用TPL访问线程池的示例: //csharp using System; using System.Threading.Tasks; class Program {     st

    2024年02月08日
    浏览(76)
  • C#学习相关系列之多线程(七)---Task的相关属性用法

    任务是 架构在线程之上 的,任务最终的执行还是要给到线程去执行的。 任务和线程之间不是一对一的关系,任务更像线程池,任务相比线程池有很小的开销和精确的控制。 (总的来说Task的用法更为先进,在多线程的时候应该优先考虑Task) 1. status 当前状态类属性(较多)  C

    2024年02月06日
    浏览(30)
  • C#里使用UdpClient和线程来创建UDP网络通讯

    C#里使用UdpClient和线程来创建UDP网络通讯 在开发的过程中,时不时就需要使用到UDP通讯。 比如与仪器进行通讯,获取仪器的数据。 又或者与PLC通讯,而PLC采用UDP的协议,而不是使用TCP协议。 作为一个软件开发人员,所以必须要熟练地使用UDP进行通讯, 才可以随着应用范围的

    2023年04月21日
    浏览(40)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包