zoukankan      html  css  js  c++  java
  • C#-----CancellationTokenSource取消线程

       1. 使用CancellationTokenSource退出Thread

    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 TokenSourceTest
    {
        public partial class Form1 : Form
        {
            private CancellationTokenSource cts = null;
            private int i = 1;
            public Form1()
            {
                InitializeComponent();
            }
    
            private void button1_Click(object sender, EventArgs e)
            {
                cts = new CancellationTokenSource();
                this.listBox1.Items.Clear();
                Thread thread = new Thread(new ThreadStart(ThreadTest));
                thread.IsBackground = true;
                thread.Start();
                this.button1.Enabled = false;
            }
    
            private void button3_Click(object sender, EventArgs e)
            {
                cts.Cancel();
                this.labelThread.Text="线程一已取消";
                this.button1.Enabled = true;
            }
    
            public void ThreadTest()
            {
                while (!cts.IsCancellationRequested)
                {
                    this.listBox1.Invoke((MethodInvoker)delegate ()
                    {
                        this.listBox1.Items.Add(i++);
                    });
                    Thread.Sleep(200);
                }
            }
        }
    }

       2. 使用CancellationTokenSource退出Task

    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 TokenSourceTest
    {
        public partial class Form1 : Form
        {
            private CancellationTokenSource cts = null;
            private int i = 1;
            public Form1()
            {
                InitializeComponent();
            }
    
            private void button4_Click(object sender, EventArgs e)
            {
                cts = new CancellationTokenSource();
                Task task = new Task(() =>
                {
                    //获取是否已请求取消此线程
                    while (!cts.IsCancellationRequested)
                    {
                        //Invoke在拥有此控件的基础窗口句柄的线程上执行指定的委托
                        this.listBox1.Invoke((MethodInvoker)delegate ()
                        {
                            this.listBox1.Items.Add(i++);
                        });
                        Thread.Sleep(200);
                    }
                });
                task.Start();
                this.button4.Enabled = false;
            }
    
            private void button2_Click(object sender, EventArgs e)
            {
                cts.Cancel();
                this.labelThread.Text = "线程二取消";
                this.button4.Enabled = true;
            }
        }
    }
  • 相关阅读:
    Codeforces Round #648 (Div. 2) A~F题解
    2020杭电多校第四场 Go Running 最小点覆盖等于二分图最大匹配数
    2019徐州网络赛 M Longest subsequence 序列自动机
    后缀数组模板题总结
    2020 Multi-University Training Contest 1 . Fibonacci Sum 水题改编
    悬线法
    欧拉回路,欧拉路径
    LGV算法 CodeForces 348D + 牛客多校 A Monotonic Matrix
    Kattis mapcolouring(状压dp)
    mysql解决错误:ERROR 2013 (HY000): Lost connection to MySQL server at 'reading initial communication packet', system error: 0
  • 原文地址:https://www.cnblogs.com/fengfuwanliu/p/11233316.html
Copyright © 2011-2022 走看看