C# 多线程示例

2023-05-16

在这里插入图片描述
百度网盘原代码连接:
链接:https://pan.baidu.com/s/19W3RFOarQtaUQDv_L4tmkw
提取码:q47x

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

namespace duo
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
        // 不使用匿名函数
        public void fun1()
        {
            Thread.Sleep(3000);
            MessageBox.Show("素菜做好了");
            Thread.Sleep(3000);
            MessageBox.Show("荤菜做好了");
        }
        public void fun2()
        {
            Thread.Sleep(2000);
            MessageBox.Show("荤菜做好了");
        }
        public void fun3()
        {
            Thread.Sleep(3000);
            MessageBox.Show("素菜做好了");
        }
        public void pring()
        {
            MessageBox.Show("菜都做好了,来吃饭吧");
        }

        

        // 未使用线程 (匿名函数)
        private void button1_Click(object sender, EventArgs e)
        {
            Thread.Sleep(3000);
            MessageBox.Show("素菜做好了");
            Thread.Sleep(3000);
            MessageBox.Show("荤菜做好了");
        }


        
        // 启动单个线程(方式一)
        private void button2_Click(object sender, EventArgs e)
        {
            // 调用函数(不使用匿名函数)
            Thread t1 = new Thread(fun1);
            t1.Start();

            // 匿名函数 可以是() 也可以任意定义变量名
            Thread t2 = new Thread(f => {
                Thread.Sleep(3000);
                MessageBox.Show("素菜做好了");
                Thread.Sleep(3000);
                MessageBox.Show("荤菜做好了");
            });
            t2.Start();


        }

        // 启动单个线程(方式二)
        private void button4_Click(object sender, EventArgs e)
        {   
            // 调用函数
            // 默认线程池
            Task.Run(() => fun1());

        }

        // 按顺序等待线程执行结束后,再运行后面代码
        private async void button5_Click(object sender, EventArgs e)
        {
            await Task.Run(() => fun2());

            await Task.Run(() => fun3());

            MessageBox.Show("菜都做好了,来吃饭吧");
        }

        private void button3_Click(object sender, EventArgs e)
        {
            // 创建列表 放入线程对象
            List<Task> ts = new List<Task>();

            ts.Add(Task.Run(() => fun2()));

            ts.Add(Task.Run(() => fun3()));

            // 运行多线程(必须有一个任意变量名)
            Task.WhenAll(ts).ContinueWith(t => pring());

        }

        // 
    }
}

感谢up主的分享:
视频教学连接:https://www.bilibili.com/video/BV16G4y1c72R

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C# 多线程示例 的相关文章

随机推荐

  • jsp上传图片失败,总是java.lang.NullPointerException: null

    检查jsp中是否指定 name属性 检查form表单是否指定entype 文件夹拒绝访问 xff0c 检查代码逻辑
  • Linux下如何安装Java环境的详细教程

    1 下载Linux版本的JDK 下载JDK地址 xff1a https www oracle com technetwork java javase downloads jdk8 downloads 2133151 html 2 使用Xft
  • Springboot整合RabbitMQ实现广播模型

    生产者代码 package com example newrabbitmq span class token punctuation span span class token function import span org junit
  • opencv 视频自动截图-小工具

    采用 xff1a python多进程 实测 cpu i7 9700 92秒 13456张 xff0c 平均约每秒146张 span class token keyword import span multiprocessing span c
  • halcon基础语法

    判断 xff1a if else 与 switch 与 and 或 or 非 not 条件 其中1个成立 xff0c 则为真 xff0c 其他情况均为假 xor dev open window span class token punctu
  • C# 字符串各种操作

    C 字符串 xff1a 字符串 转 char类型的数组字符串 批量合成字符串大小写转换字符串分割字符串替换字符串 是否包含字符串 比较字符串截取字符串 是否 以什么开头 结尾 字符串 第一个 最后一个 字符串 去除空格字符串 空与null
  • C# 里氏转换

    子类可以赋值给父类 子类可以转换为父类 protected 修饰符 是让这个字段 xff0c 在子类中也可以访问 设定访问权限 span class token keyword using span span class token nam
  • Node.js — 内置API模块

    文章目录 0 JS 与 Node js的理解 内置API模块1 导入 fs 模块 xff0c 导入文件系统模块2 导入 path 模块 xff0c 读取文件 xff0c 路径处理模块3 http xff08 创建web服务器的 xff09
  • C# 列表:ArrayList、字典:Hashtable、增删改查

    添加单个 对象或多个 删除指定单个 范围 清空 是否 包含 不包含 索引直接修改 列表 xff1a ArrayList span class token comment 集合 xff08 我称之为列表 xff09 span span cla
  • C# path类:操作路径、File类:操作文件、文件流读写

    路径操作 span class token class name span class token keyword string span span str span class token operator 61 span span cl
  • C# 列表:list 字典:dict

    列表 list 增删改查 与数组转换 span class token comment 创建泛型集合 span span class token class name List span class token punctuation lt
  • C# 虚方法多态、抽象类多态、接口

    C 虚方法多态 抽象类多态 虚方法 xff1a 希望重新父类中的某个方法时 xff0c 使用虚方法 抽象类 xff1a 有多个规定的处理方式 xff0c 但实际实现的方式不同 xff0c 使用抽象类 抽象类就是为了设立规范 xff0c 为了
  • halcon 学习:图像读取与保存、查看类型、图像大小、转为灰度、分割与合并通道、获取图像指针、

    halcon 学习 xff1a 图像读取与保存 查看类型 图像大小 转为灰度 分割与合并通道 获取图像指针 read image span class token punctuation span Image span class toke
  • halcon 获取XLD亚像素的测量距离

    read image span class token punctuation span Image span class token string 39 F xue xi 1 png 39 span span class token pu
  • halcon 基础语法:数组、向量、字典、

    数组 数组 Tuple 1 span class token operator 61 span span class token punctuation span span class token number 1 span span cl
  • halcon 电气柜绿灯位置安装是否正确

    思路 xff1a 找到电气柜的区域根据绿色通道对绿色敏感 xff0c 找到绿色按钮特征过滤 xff0c 与空对象相比 xff0c 确定绿色按钮是否存在填充后截取出来 xff0c 转为亚像素 xff0c 筛选和计算中心点中心点是否在规定区域内
  • C# 基础语法示例

    基础语法 span class token keyword using span span class token namespace System span span class token punctuation span span c
  • C# 委托的基础使用

    委托 我认为委托实际上是一种设计模式的封装 委托的本质就是 xff0c 将大致的流程定下来 xff08 包含输入与输出格式 xff09 xff0c 将其中计算的细节由一个被委托的函数进行具体实现 委托 xff1a 将函数当作形参进行传递 要
  • Node.js — 模块化

    文章目录 1 模块化1 模块化与作用域2 module 模块3 npm与包 1 模块化 1 模块化与作用域 编程领域中的模块化 xff1a 遵守固定的规则 xff0c 把一个大文件拆成独立并相互依赖的多个小模块 模块化好处 xff1a 提高
  • C# 多线程示例

    百度网盘原代码连接 xff1a 链接 xff1a https pan baidu com s 19W3RFOarQtaUQDv L4tmkw 提取码 xff1a q47x span class token keyword using spa