C#基础教程 多线程编程入门 Thread/Task/async/await

news2024/9/22 19:36:52
 private void button1_Click(object sender, EventArgs e)
        {
            //控制主线程(单线程操作)
            MessageBox.Show("开始做菜", "友情提示");
            Thread.Sleep(3000);//主线程休眠
            MessageBox.Show("素菜做好了","友情提示");
            Thread.Sleep(5000);
            MessageBox.Show("荤菜做好了", "友情提示");
        }

        private void button2_Click(object sender, EventArgs e)
        {
            //多线程操作,重新创建一个线程用来做菜
            Thread td = new Thread(()=> {
                MessageBox.Show("开始做菜", "友情提示");
                Thread.Sleep(3000);//线程休眠(只是增设的线程休眠)不影响主线程操作
                MessageBox.Show("素菜做好了", "友情提示");
                Thread.Sleep(5000);
                MessageBox.Show("荤菜做好了", "友情提示");
            });
            td.Start();//开启线程
        }

        private void button3_Click(object sender, EventArgs e)
        {
            //同时开始多个线程并对线程进行管理
            Task.Run(() =>
            {
                MessageBox.Show("开始做菜", "友情提示");
                Thread.Sleep(3000);//线程休眠(只是增设的线程休眠)不影响主线程操作
                MessageBox.Show("素菜做好了", "友情提示");
                Thread.Sleep(5000);
                MessageBox.Show("荤菜做好了", "友情提示");
            });
        }

        private void button4_Click(object sender, EventArgs e)
        {
            //多线程同时进行互不干扰
            Task.Run(() =>
            {
                MessageBox.Show("开始做菜", "友情提示");
            });
            Task.Run(() =>
            {
                Thread.Sleep(3000);//线程休眠(只是增设的线程休眠)不影响主线程操作
                MessageBox.Show("素菜做好了", "友情提示");
            });
            Task.Run(() =>
            {
                Thread.Sleep(5000);
                MessageBox.Show("荤菜做好了", "友情提示");
            });
        }

        private void button5_Click(object sender, EventArgs e)
        {
            //这时主线程与增设线程同时进行互不干扰,所以并不会看到先运行完task线程内的代码再执行MessageBox.Show("菜都做好了,大家块来吃饭!","提示");
            Task.Run(() =>
            {
                MessageBox.Show("开始做菜", "友情提示");
                Thread.Sleep(3000);//线程休眠(只是增设的线程休眠)不影响主线程操作
                MessageBox.Show("素菜做好了", "友情提示");
                Thread.Sleep(5000);
                MessageBox.Show("荤菜做好了", "友情提示");
            });
            
            MessageBox.Show("菜都做好了,大家块来吃饭!","提示");
        }

        private async void button6_Click(object sender, EventArgs e)
        {
            //添加关键词await线程等待,主线程等待新增线程完成后在执行主线程代码,同时方法名需要添加关键词async
            await Task.Run(() =>
            {
                MessageBox.Show("开始做菜", "友情提示");
                Thread.Sleep(3000);//线程休眠(只是增设的线程休眠)不影响主线程操作
                MessageBox.Show("素菜做好了", "友情提示");
                Thread.Sleep(5000);
                MessageBox.Show("荤菜做好了", "友情提示");
            });

            MessageBox.Show("菜都做好了,大家块来吃饭!", "提示");
        }

        private void button7_Click(object sender, EventArgs e)
        {
            List<Task> ts = new List<Task>();
            MessageBox.Show("开始做菜", "友情提示");
            //多线程同时进行互不干扰
            ts.Add(Task.Run(() =>
            {
                Thread.Sleep(3000);//线程休眠(只是增设的线程休眠)不影响主线程操作
                MessageBox.Show("素菜做好了", "友情提示");
            }));
            ts.Add(Task.Run(() =>
            {
                Thread.Sleep(5000);
                MessageBox.Show("荤菜做好了", "友情提示");
            }));
            //等待集合中新增线程完成.在输出MessageBox.Show("菜都做好了,大家块来吃饭!", "提示")
            Task.WhenAll(ts).ContinueWith(t => {
                MessageBox.Show("菜都做好了,大家块来吃饭!", "提示");
            });
        }

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1230507.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

linux上安装qt creator

linux上安装Qt Creator 1 Qt Creator 的下载 下载地址为&#xff1a;http://download.qt.io/archive/qt/ 根据自己的需求选择Qt Creator版本&#xff0c;这里我下载的是5.12.9&#xff0c;如下图所示&#xff1a; 在ubuntu上可以使用wget命令下载安装包&#xff1a; wget h…

el-table实现表格内嵌套表格

文章目录 一、效果图二、使用场景三、所用组件元素&#xff08;Elementui&#xff09;四、代码部分 一、效果图 二、使用场景 &#x1f6c0;el-form 表单内嵌套el-table表格 &#x1f6c0;el-table 表格内又嵌套el-table表格 三、所用组件元素&#xff08;Elementui&#xff…

BLE协议栈入门学习

蓝牙LE栈 物理层 频带 蓝牙LE在2400MHz到2483.5MHz范围内的2.4GHz免授权频段工作&#xff0c;该频段分为40个信道&#xff0c;每个信道间隔为2MHz。 时分 蓝牙LE是半双工的&#xff0c;可以发送和接收&#xff0c;但不能同时发送和接收&#xff0c;然而&#xff0c;所有的设…

“绵柔的,好喝的”海之蓝畅销20年的经典秘诀:做大众喜爱的好酒

执笔 | 尼 奥 编辑 | 萧 萧 在中国白酒历史长河中&#xff0c;有的品牌如大浪淘沙而灰飞烟灭&#xff0c;也有的白酒品牌因为不断创新而经久不衰。我们时常在思考一个产业命题&#xff1a;白酒品牌常青的秘诀到底是什么&#xff1f; 经过20多年的产业发展&#xff0c;中国…

4-2计算小于1000的正整数的平方根

#include<stdio.h> #include<math.h> int main() {int i;int t;printf("请输入一个数:");scanf("%d",&i);if(i>1000){printf("请重新输入一个数&#xff1a;");scanf("%d",&i);}tsqrt(i);printf("%d的平方…

要事第一:如何通过6个步骤确定项目的优先级

当收到很多项目请求并且每个请求都是重中之重时&#xff0c;该怎么办&#xff1f;从最易完成的开始&#xff1f;还是先解决最大的问题&#xff1f; 实际上两种做法都不对。确定项目优先级的更好方法是评估以下内容&#xff0c;而不是关注项目规模或完成时长&#xff1a; ● 每…

论文导读 | 大语言模型与知识图谱复杂逻辑推理

前 言 大语言模型&#xff0c;尤其是基于思维链提示词&#xff08;Chain-of Thought Prompting&#xff09;[1]的方法&#xff0c;在多种自然语言推理任务上取得了出色的表现&#xff0c;但不擅长解决比示例问题更难的推理问题上。本文首先介绍复杂推理的两个分解提示词方法&a…

滚珠螺杆在航天工业领域中的重要性

滚珠螺杆是重要的航天工业配件之一&#xff0c;在航天工业领域中具有非常重要的地位和作用。 首先&#xff0c;滚珠螺杆作为一种高精度、高刚度的传动元件&#xff0c;能够提供准确的传动和定位精度&#xff0c;从而保证航天器的可靠性和性能。航天器在飞行过程中需要精确控制其…

【STM32】W25Q64 SPI(串行外设接口)

一、SPI通信 0.IIC与SPI的优缺点 https://blog.csdn.net/weixin_44575952/article/details/124182011 1.SPI介绍 同步&#xff08;有时钟线&#xff09;&#xff0c;高速&#xff0c;全双工&#xff08;数据发送和数据接收各占一条线&#xff09; 1&#xff09;SCK:时钟线--&…

软件数据采集使用代理IP的好处用哪些?

随着互联网的快速发展&#xff0c;越来越多的企业开始通过软件数据采集来获取目标客户的信息。然而&#xff0c;在进行数据采集的过程中&#xff0c;由于不同网站的访问规则和限制&#xff0c;经常会遇到一些问题。这时候&#xff0c;使用代理IP就可以很好地解决这些问题。下面…

震惊!这个网站几分钟就能制作出电子画册

一直以来&#xff0c;制作电子画册都是一项繁琐且耗时的任务&#xff0c;需要专业的设计技能和大量的时间。 但是现在&#xff0c;有了这个神奇的网站&#xff0c;FLBOOK在线制作电子杂志平台。一切都变得如此简单&#xff01;它不仅提供了丰富的模板和素材&#xff0c;还支持在…

封装实现unordered_map和set

什么是哈希思想 首先哈希是一个关联式容器&#xff0c;各个数据之间是具有关系的&#xff0c;和vector那些序列式容器不一样。 首先unordered_map中的迭代器是一个单向的迭代器。 其次在unorderede_map和set中是无序的&#xff08;因为底层不是红黑树&#xff0c;而是哈希了…

接口自动化项目落地之HTTPBin网站

原文&#xff1a;https://www.cnblogs.com/df888/p/16011061.html 接口自动化项目落地系列 找个开源网站或开源项目&#xff0c;用tep实现整套pytest接口自动化项目落地&#xff0c;归档到电子书&#xff0c;作为tep完整教程的项目篇一部分。自从tep完整教程发布以后&#…

【广州华锐互动】VR虚拟现实技术助力太空探险:穿越时空,探索宇宙奥秘

随着科技的不断发展&#xff0c;虚拟现实&#xff08;VR&#xff09;技术已经逐渐走进我们的生活。在教育领域&#xff0c;VR技术的应用也日益广泛&#xff0c;为学生提供了更加生动、直观的学习体验。本文将以利用VR开展太空探险学习为主题&#xff0c;探讨如何将这一先进技术…

3D 纹理渲染如何帮助设计师有效、清晰地表达设计理念

在线工具推荐&#xff1a; 三维数字孪生场景工具 - GLTF/GLB在线编辑器 - Three.js AI自动纹理化开发 - YOLO 虚幻合成数据生成器 - 3D模型在线转换 - 3D模型预览图生成服务 定义 3D 渲染可视化及其用途 3D 可视化是一种艺术形式。这是一个机会。这是进步。借助 3D 纹理…

解决企业图纸管理混乱的四大方法

随着企业业务的快速发展&#xff0c;图纸作为企业生产过程中不可或缺的一部分&#xff0c;其管理也变得越来越重要。然而&#xff0c;很多企业在图纸管理方面存在很多问题&#xff0c;其中最普遍的问题就是图纸混乱。那么&#xff0c;如何解决企业图纸混乱的问题呢&#xff1f;…

我买了个AI员工,凌晨5点喊我起床,搞了篇全网40万+的爆款

大家好我是二狗&#xff0c;是夕小瑶科技说编辑部的一名作者。 前天早上凌晨5点左右的时候&#xff0c;我被尿憋醒了&#xff0c;起来上了个厕所。 就在我准备躺下接着睡的时候&#xff0c;顺手看了一眼手机。 咦?屏幕上弹出了一条邮件&#x1f4ee;推送&#xff0c;是我们编…

系列八、Callable接口

一、Callable vs Runnable &#xff08;1&#xff09;Callable接口有返回值&#xff0c;Runnable接口无返回值&#xff1b; &#xff08;2&#xff09;Callable接口会抛异常&#xff0c;Runnable接口不会抛异常&#xff1b; &#xff08;3&#xff09;落地方法不一样&#xff0…

JOSEF 同步检查继电器 JT-1 额定电压100V 柜内固定安装,板前接线

系列型号 JT-1同步检查继电器&#xff1b; DT-1同步检查继电器&#xff1b; JT-3同步检查继电器&#xff1b; DT-3同步检查继电器&#xff1b; DT-1/200同步检查继电器&#xff1b; DT-1/160同步检查继电器; DT-1/130同步检查继电器; DT-1/120同步检查继电器; DT-1/90…

Sentinel 系统规则 (SystemRule)

Sentinel 是面向分布式、多语言异构化服务架构的流量治理组件&#xff0c;主要以流量为切入点&#xff0c;从流量路由、流量控制、流量整形、熔断降级、系统自适应过载保护、热点流量防护等多个维度来帮助开发者保障微服务的稳定性。 SpringbootDubboNacos 集成 Sentinel&…