首页 > 编程语言 >C#中的任务和线程

C#中的任务和线程

时间:2024-05-07 14:00:44浏览次数:20  
标签:MessageBox 友情 Thread Show C# 任务 线程 Sleep

  1. Single thread
    • 单线程效果,线程卡顿
        //---------------------------单线程效果---------------------------
        private void button1_Click(object sender, EventArgs e)
        {
            //总耗时3+5=8秒
            Thread.Sleep(3000);
            MessageBox.Show("单线程延时三秒执行,主界面有卡顿", "友情提示");
            Thread.Sleep(5000);
            MessageBox.Show("单线程延时五秒执行,主界面有卡顿", "友情提示");
        }
  1. Multiple thread
    • 用委托或者lambda实现
        //---------------------------多线程效果---------------------------
        private void button2_Click(object sender, EventArgs e)
        {
            //thread()里面需要填入一个委托,或者说方法,此处使用lambda表达式,简化程序代码
            //运行该线程不会影响到UI线程,即不会卡顿
            Thread t = new Thread(() =>
            {
                //总耗时3+5=8秒
                Thread.Sleep(3000);
                MessageBox.Show("多线程延时三秒执行,主界面无卡顿", "友情提示");
                Thread.Sleep(5000);
                MessageBox.Show("多线程延时五秒执行,主界面无卡顿", "友情提示");
            });
            t.Start();
            //如果不用lambda匿名方法,则代码如下
            //()中放入方法名,实现调用
           // Thread t1 = new Thread(threadfun);
        }
  1. Task
  • 用task来做任务管理,不需要先实例化thread
        //---------------------------任务方式实现多线程---------------------------
        //推荐用法
        private void button3_Click(object sender, EventArgs e)
        {
            //开启任务方式1.()中直接填入方法名
            //Task.Run(threadfun);
            //开启任务方式2.匿名表达式
            Task.Run(() =>
            {
                //总耗时3+5=8秒
                Thread.Sleep(3000);
                MessageBox.Show("任务延时三秒执行,无卡顿", "友情提示");
                Thread.Sleep(5000);
                MessageBox.Show("任务延时五秒执行,无卡顿", "友情提示");
            });
        }
  1. Synchronization
  • 同步执行方法
        //------------------------同时多线程运行------------------------
        private void button4_Click(object sender, EventArgs e)
        {
            //同步执行,总耗时5秒
            //匿名任务1
            Task.Run(() =>
            {
                Thread.Sleep(3000);
                MessageBox.Show("任务1延时三秒执行,无卡顿", "友情提示");
            });
            //匿名任务2
            Task.Run(() =>
            {
                Thread.Sleep(5000);
                MessageBox.Show("任务2延时五秒执行,无卡顿", "友情提示");
            });
            //两个匿名任务会同时开启
        }
  1. Await
  • 异步方法,方法前用async标记,后续任务需要等await标记任务执行完毕后再执行
        //------------------------等待当前任务结束在往下执行(异步方法async)------------------------
        //await关键字
        private async void button5_Click(object sender, EventArgs e)
        {
          await  Task.Run(() =>
            {
                Thread.Sleep(3000);
                MessageBox.Show("任务延时三秒执行,无卡顿", "友情提示");
                Thread.Sleep(5000);
                MessageBox.Show("任务延时五秒执行,无卡顿", "友情提示");
            });

            MessageBox.Show("await:等到两个任务均执行完成后再执行该任务", "友情提示");
        }
  1. WhenAll
  • 等到所有任务结束后再执行
        //------------------------等到所有任务结束后再执行------------------------
        private void button6_Click(object sender, EventArgs e)
        {
            //新建一个列表用来存放任务
            List<Task> ts = new List<Task>();
            //添加任务1
            ts.Add(Task.Run(() =>
            {
                Thread.Sleep(3000);
                MessageBox.Show("任务延时三秒执行,无卡顿", "友情提示");
            }));
            //添加任务2
            ts.Add(Task.Run(() =>
            {
                Thread.Sleep(5000);
                MessageBox.Show("任务延时五秒执行,无卡顿", "友情提示");
            }));
            //WhenAll..continue with
            //t表示前一个任务的内容,语句要求必须填写。此处用不到具体内容,留空就行
            Task.WhenAll(ts).ContinueWith(t => { MessageBox.Show("WhenAll:等到两个任务均执行完成后再执行该任务", "友情提示"); });
        }

标签:MessageBox,友情,Thread,Show,C#,任务,线程,Sleep
From: https://www.cnblogs.com/xiacuncun/p/18177093

相关文章

  • 使用pycnblog一键拖拽同步markdown和图片
    目录原因解决办法参考链接准备工作配置config.yaml其他设置图片运行原因本地使用Typora写完文档,上传博客园时,图片不能同步解决办法参考链接博客园上传markdown文件准备工作下载工具pycnblog安装Python3pipinstallpyyaml配置config.yamlblog_url:htt......
  • Acwing 143. 最大异或对
    题意:n个数,求任意两个数的最大异或值。思路:01前缀树总结:确定了处理01最大异或问题时,采用先bitset<32>(x).to_string()再插入和计算的方式。32位有符号整数的最大值应该是(1<<31)-1,而不是1<<32位,1<<32位代表这个1在第33位上。但是给bitset开的时候,要开到32位。此时最高位......
  • ICPC2024 武汉邀请赛 题解
    2024ICPCNationalInvitationalCollegiateProgrammingContest,WuhanSiteB-CountlessMeSolution显然,只能执行\(n\)次操作是没用的条件我们只需要把和\(sum\)分给\(n\)个数,使得\(n\)个数的或和最小即可从高到低考虑每一位,假设此时枚举到第\(i\)位如果这一......
  • Scopus & SciVal 研究选题的逻辑化构造
    主讲人:付强,爱思唯尔科研管理部特聘讲师。主要内容为:1. 高效文献发现与分析功能。2. 案例分享:如何辅助选题 ——从大领域入手锚定具体问题和方向。3. 逻辑化构筑自己的课题网络。https://www.bilibili.com/video/BV1y3411p7nz/?vd_source=3ad05e655a5ea14063a9fd1c0dcdee3e......
  • blazor中的PageTitle输出keywords和description,自定义组件
    在blazor的PageTitle中不具备输出keywords和description的功能,而如果直接使用<mate>标签,输出中文时会变成乱码,所以我给大家推介下面的代码解君愁:1@*<PageTitle>@Title-@AppTitle</PageTitle>*@2<HeadContent>3@(newMarkupString($"<metaname=\"keywords\"......
  • c# 多线程的几种方式 【转载】
    1.什么是线程?进程作为操作系统执行程序的基本单位,拥有应用程序的资源,进程包含线程,进程的资源被线程共享,线程不拥有资源。 2.前台线程和后台线程的区别?程序关闭时,后台线程直接关闭,但前台线程会执行完后关闭。通过Thread类新建线程默认为前台线程。其他方式创建的都是后台线程......
  • [LeetCode] 2487. Remove Nodes From Linked List
    Youaregiventheheadofalinkedlist.Removeeverynodewhichhasanodewithagreatervalueanywheretotherightsideofit.Returntheheadofthemodifiedlinkedlist.Example1:Input:head=[5,2,13,3,8]Output:[13,8]Explanation:Thenodesth......
  • SecureCRT使用笔记
    文件传输第一种方式:上传文件只需在shell终端仿真器中输入命令"rz",即可从弹出的对话框中选择本地磁盘上的文件,利用Zmodem上传到服务器当前路径下。下载文件只需在shell终端仿真器中输入命令"sz文件名",即可利用Zmodem将文件下载到本地某目录下。通过"FileTransfer"可以修改......
  • LeetCode 2060. Check if an Original String Exists Given Two Encoded Strings
    原题链接在这里:https://leetcode.com/problems/check-if-an-original-string-exists-given-two-encoded-strings/description/题目:Anoriginalstring,consistingoflowercaseEnglishletters,canbeencodedbythefollowingsteps:Arbitrarily split itintoa sequ......
  • Burp Suite Professional 2024.4 (macOS, Linux, Windows) - Web 应用安全、测试和扫
    BurpSuiteProfessional2024.4(macOS,Linux,Windows)-Web应用安全、测试和扫描BurpSuiteProfessional,Test,find,andexploitvulnerabilities.请访问原文链接:BurpSuiteProfessional2024.4(macOS,Linux,Windows)-Web应用安全、测试和扫描,查看最新版。原创......