C#笔记10 Thread类怎么终止(Abort)和阻止(Join)线程

Thread类

C#笔记8 线程是什么?多线程怎么实现和操作?-CSDN博客

C#笔记9 对线程Thread的万字解读 小小多线程直接拿下!-CSDN博客

上次说过怎么简单的使用多线程,怎么创建多线程,但是没有具体分析它的终止和释放。

线程的终止

Abort方法

英文意为终止,该方法用于终止线程:

它的方法是引发一个异常,从而跳到终结线程的过程。

在我们的.Net8.0平台,这也是个过时的方法。

  Thread myThread = new Thread(mythreaddo);chattx.Text += "\nthread start";myThread.Start();chattx.Text += "\nthread suspend";// 挂起线程myThread.Suspend();chattx.Text += "\nmainthreadsleep start" + DateTime.Now.ToString();// 等待一段时间或执行其他操作Thread.Sleep(1000);chattx.Text += "\nmainthreadsleep over" + DateTime.Now.ToString();// 恢复线程myThread.Resume();myThread.Abort();myThread.Start();

事实上在线程abort之后就不能再次启动了。如果你执行start方法会导致它报错。

此方法其实也有重载。

public void Abort(Object stateInfo);

    public void Abort(object stateInfo){AbortReason = stateInfo;AbortInternal();}

 传入的参数作为终止的异常信息,可以被正在终止的线程使用。

using System;
using System.Threading;class Test
{public static void Main(){Thread newThread  = new Thread(new ThreadStart(TestMethod));newThread.Start();Thread.Sleep(1000);// Abort newThread.Console.WriteLine("Main aborting new thread.");newThread.Abort("Information from Main.");// Wait for the thread to terminate.newThread.Join();Console.WriteLine("New thread terminated - Main exiting.");}static void TestMethod(){try{while(true){Console.WriteLine("New thread running.");Thread.Sleep(1000);}}catch(ThreadAbortException abortException){Console.WriteLine((string)abortException.ExceptionState);}}
}

但是在我们的.Net Framework 4.7.2也就是我们的winform的C#7.3中,此代码输出结果不太一样,而且join会影响我们的界面线程导致我们的数据无法输出。

这里我们就先不探究,只要知道怎么使用Abort方法即可。

Join()方法

此方法用于阻止调用线程,直到某个线程终止为止。意思是让当前线程等待另外一个线程执行完毕。

怎么理解呢:

它有三种重载:

Join()	
在继续执行标准的 COM 和 SendMessage 消息泵处理期间,阻止调用线程,直到由该实例表示的线程终止。Join(Int32)	
在继续执行标准的 COM 和 SendMessage 消息泵处理期间,阻止调用线程,直到由该实例表示的线程终止或经过了指定时间为止。Join(TimeSpan)	
在继续执行标准的 COM 和 SendMessage 消息泵处理期间,阻止调用线程,直到由该实例表示的线程终止或经过了指定时间为止。

 示例代码

static void Main(){Thread myThread = new Thread(DoWork);myThread.Start();// 等待线程完成myThread.Join();}static void DoWork(){// 执行线程任务Thread.Sleep(1000); // 假设线程需要1秒来完成工作}

在这个例子中,我们创建了一个名为 myThread 的线程,并启动了它。我们使用 myThread.Join() 方法等待 myThread 完成其任务。只有当 myThread 完成其工作或被终止时,Join 方法才会返回。

​永远不要从当前 Join 线程调用 表示当前线程的 对象的 方法 Thread 。 这会导致应用无响应,因为当前线程无限期地等待自身,

join方法的重载和sleep一样支持int32和timespan。都是用来表示等待的最大时间。

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

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

相关文章

【乐吾乐大屏可视化组态编辑器】使用手册

1 总览 开始设计:大屏可视化设计器 - 乐吾乐Le5le 1.1 画布 画布即绘画区域,将图形拖拽到画布进行编辑,绘制大屏。 1.2 菜单栏 顶部菜单导航,一级菜单可设置Logo、公司名称、文件编辑、常用编辑、查看、帮助,设置大…

text2sql(NL2Sql)综述《The Dawn of Natural Language to SQL: Are We Fully Ready?》

《The Dawn of Natural Language to SQL: Are We Fully Ready?》(github)出自2024年6月的NL2SQL(Natural language to SQL )综述论文。这篇论文尝试回答如下三个问题: 问题1:NL2SQL的现状是什么?(Q1:Where Are we Now?) 论文图1总结了近20年NL2SQL方法…

Cyber Weekly #24

赛博新闻 1、OpenAI发布最强模型o1 本周四(9月12日),OpenAI宣布推出OpenAIo1系列模型,标志着AI推理能力的新高度。o1系列包括性能强大的o1以及经济高效的o1-mini,适用于不同复杂度的推理任务。新模型在科学、编码、数…

比亚迪电动汽车的市场占比太惊人

比亚迪(BYD)在中国电动汽车市场的崛起无疑是近年来最显著的现象之一。凭借其强大的技术整合、丰富的产品线以及价格优势,比亚迪已经迅速成为中国乃至全球电动汽车领域的领导者。在2024年,比亚迪的市场份额在中国汽车市场达到了惊人…

SSHamble:一款针对SSH技术安全的研究与分析工具

关于SSHamble SSHamble是一款功能强大的SSH技术安全分析与研究工具,该工具基于Go语言开发,可以帮助广大研究人员更好地分析SSH相关的安全技术与缺陷问题。 功能介绍 SSHamble 是用于 SSH 实现的研究工具,其中包含下列功能: 1、针…

MySQL练手题--公司和部门平均工资比较(困难)

一、准备工作 Create table If Not Exists Salary (id int, employee_id int, amount int, pay_date date); Create table If Not Exists Employee (employee_id int, department_id int); Truncate table Salary; insert into Salary (id, employee_id, amount, pay_date) va…

危机中的机遇:客户服务在品牌危机管理中的角色与价值

在瞬息万变的商业环境中,品牌危机如同暗流涌动的漩涡,随时可能将企业卷入深渊。然而,正如古语所云:“祸兮福之所倚”,危机之中往往也蕴藏着转机与机遇。在这一过程中,客户服务作为企业与消费者之间的桥梁&a…

各类元器件调试记录-E+H

一、EH压力传感器 适用型号为: Cerabar S PMC71, PMP71/75 Deltabar S FMD76/77/78, PMD70/75 Deltapilot S FMB70 调试过程:(后续补上图片) 一、湿标(湿调) 1、前提条件:罐体可以灌满和实际水箱水位高度 2、调试步骤: A、调节语…

C++在Linux实现多线程和多进程的TCP服务器和客户端通信

多进程版本 服务器 #include <arpa/inet.h> #include <stdlib.h> #include <stdio.h> #include <string.h> #include <unistd.h> #include <sys/socket.h> #include <sys/wait.h> #include <signal.h> #include <string&…

uni-app和Node.js使用uni-push2.0实现通知栏消息推送功能

前言 uniapp 提供了 unipush 统一推送服务,但是每次要推送消息的时候都要登陆 Dcloud 开发者后台&#xff0c;有点不方便&#xff0c;运营需要在我们的后台系统就可以完成操作。 效果演示 消息下发流程 名词解释 名词解释通知消息指定通知标题和内容后&#xff0c;由个推 SD…

电脑上如何多开微信软件(多个微信同时使用)

想登录几个就下面这种文件里&#xff0c;复制几行即可&#xff1a; 创建的是以 .bat 文件结尾的txt文件&#xff08;先创建一个txt文本文档&#xff0c;等写好了命令保存后&#xff0c;再把文件的后缀名改为: .bat &#xff09;再保存即可。然后&#xff0c;右键以管理员运行&a…

炫酷HTML蜘蛛侠登录页面

全篇使用HTML、CSS、JavaScript&#xff0c;建议有过基础的进行阅读。 一、预览图 二、HTML代码 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-w…

C语言的结构体类型

在我们使用C语言进行编写代码时&#xff0c;常常会使用已经给定的类型来创建变量&#xff0c;比如int型&#xff0c;char型&#xff0c;double型等&#xff0c;而当我们想创建一些较为复杂的东西时&#xff0c;单单用一个类型变量是没办法做到的&#xff0c;比如我们想创建一个…

DPDK基础入门(十):虚拟化

I/O虚拟化 全虚拟化&#xff1a;宿主机截获客户机对I/O设备的访问请求&#xff0c;然后通过软件模拟真实的硬件。这种方式对客户机而言非常透明&#xff0c;无需考虑底层硬件的情况&#xff0c;不需要修改操作系统。 半虚拟化&#xff1a;通过前端驱动/后端驱动模拟实现I/O虚拟…

嵌入式鸿蒙系统开发语言与开发方法分析

大家好,今天主要给大家分享一下,HarmonyOS系统的主力开发语言ArkTS语言开发方法,它是基于TypeScript(简称TS)语言扩展而来。 第一:ArkTS语言基本特性 目的:声明式UI,让开发者以更简洁,更自然的方式开发高性能应用。 声明式 UI基本特性: 基本UI描述:ArkTS定义了各种装饰…

使用Ubuntu耳机输出正弦波信号

最近有一个项目想使用喇叭发出一个标准的正弦波测试信号&#xff0c;故记录下操作过程 sudo apt install libasound2-dev 否则有可能会报错&#xff1a; alsaaudio.c:28:10: fatal error: alsa/asoundlib.h: No such file or directory 安装pyalsaaudio&#xff1a; pip …

合肥鲸天科技的外卖会员卡系统有人做过吗?赚钱吗?

我们先来了解一下这个合肥鲸天科技&#xff0c;通过我在网上找到的资料和企业查询&#xff0c;这家公司还是很有实力的&#xff0c;合肥鲸天科技有限公司也是欢迎有合作的人到公司来进行一个考察和合作其他一些项目的。 外卖会员卡简介绍&#xff1a; 这个外卖会员卡&#xf…

Linux | 探索 Linux 信号机制:信号的产生和自定义捕捉

信号是 Linux 操作系统中非常重要的进程控制机制&#xff0c;用来异步通知进程发生某种事件。理解信号的产生、阻塞、递达、捕捉等概念&#xff0c;可以帮助开发者更好地编写健壮的应用程序&#xff0c;避免由于未处理的信号导致程序异常退出。本文将带你从基础概念开始&#x…

Redis Key的过期策略

Redis 的过期策略主要是指管理和删除那些设定了过期时间的键&#xff0c;以确保内存的有效使用和数据的及时清理。 具体来说&#xff0c;Redis 有三种主要的过期策略&#xff1a;定期删除&#xff08;Scheduled Deletion&#xff09;、惰性删除&#xff08;Lazy Deletion&#…

C#命令行参数解析库System.CommandLine介绍

命令行参数 平常在日常的开发过程中&#xff0c;会经常用到命令行工具。如cmd下的各种命令。 以下为sc命令执行后的截图&#xff0c;可以看到&#xff0c;由于没有输入任何附带参数&#xff0c;所以程序并未执行任何操作&#xff0c;只是输出了描述和用法。 系统在创建一个新…