首页 > 编程语言 >C# .NET6结束UI线程

C# .NET6结束UI线程

时间:2023-06-25 16:57:15浏览次数:36  
标签:Thread C# Abort 线程 UI NET6 Dispatcher

在.NET6项目中,不再支持Thread.Abort:Thread.Abort is not supported and throws PlatformNotSupportedException.

原因是Thread.Abort可能导致资源泄漏,

1. 不正常的关闭,导致线程运行过程中待释放资源的业务代码,未能完成执行。

2. 异常捕获,业务模块未添加捕获、业务模块添加了捕获但finally未执行。这也会引发其它不期望的模块逻辑异常以及资源释放问题。

Thread.Abort()被认为是一种不安全的方法来终止线程,所以要找下其它的替代方案。

可以通过Dispatcher的BeginInvokeShutdown方法,来关闭UI线程:

1     public static void Close(this Dispatcher dispatcher)
2     {
3         dispatcher.BeginInvokeShutdown(DispatcherPriority.Normal);
4         dispatcher.Thread.Join();
5     }

调用Shutdown会让Dispatcher停止处理消息队列中的操作,并退出Dispatcher.Run消息循环,从而结束UI线程。

Thread.Join()可以等待UI线程结束,以确保Close的同步操作完成时,能满足调用方立即结束UI线程的期望。

标签:Thread,C#,Abort,线程,UI,NET6,Dispatcher
From: https://www.cnblogs.com/kybs0/p/17503312.html

相关文章

  • 刷新20项代码任务SOTA,Salesforce提出新型基础LLM系列编码器-解码器Code T5+
    前言 大型语言模型(LLMs)最近在代码层面的一系列下游任务中表现十分出彩。通过对大量基于代码的数据(如GitHub公共数据)进行预训练,LLM可以学习丰富的上下文表征,这些表征可以迁移到各种与代码相关的下游任务。但是,许多现有的模型只能在一部分任务中表现良好,这可能是架构和......
  • function 和 bind 函数
    bind函数可以改变函数的形态例如:voidadd(intx,inty)的函数类型为void(int,int)。使用bind绑定一个元素bind(add,1)后,变成void(int),其中x绑定为1。使用function类型接收bind的返回值摘自cppreference(std::function)//存储自由函数std::function<void(int)>......
  • 根据SPN和FMI生成DTC的方法
    做事情,记着抓主要矛盾,不可能面面俱到 =DEC2BIN(MOD(QUOTIENT(A1,256^2),256),8)&DEC2BIN(MOD(QUOTIENT(A1,256^1),256),8)&DEC2BIN(MOD(QUOTIENT(A1,256^0),256),8) 这个函数的意思就是把表格A1里面的数据全部搞成二进制例如A1里面是十进制520702 =DEC2BIN(D43,5) ......
  • React基本引入和JSX语法
    1.1React介绍1.1.1.官网英文官网:https://reactjs.org/中文官网:https://react.docschina.org/1.1.2.介绍描述用于动态构建用户界面的JavaScript库(只关注于视图)由Facebook开源1.1.3.React的特点声明式编码组件化编码ReactNative编写原生应用高效(优秀......
  • golang使用core dump分析定位程序崩溃问题
     原创 萧瑟 golang面试经典讲解 2023-06-2319:05 发表于上海收录于合集#go语言6个#go6个##go工具15个一、前言coredump是一个包含着意外终止的程序其内存快照的文件。这个文件可以被用来事后调试(debugging)以了解为什么会发生崩溃,同时了解其中涉及到的变量。通......
  • 三、更改INSTANCE_NAME
    三、更改INSTANCE_NAME1、检查当前的instance_name是wwlSQL>selectinstance_namefromv$instance;INSTANCE_NAME----------------wwl2、创建pfile参数文件SQL>createpfilefromspfile;                             Filecreated.3、关......
  • 配置vnc远程连接Linux和unix服务器图形界面安装Oracle
    1、配置并开启vnc服务[oracle@localhost~]$vncserverYouwillrequireapasswordtoaccessyourdesktops.Password:---这里要求输入vnc客户端登录的密码并重复Verify:New'localhost.localdomain:2(oracle)'desktopislocalhost.localdo......
  • AIX中使用DBCA创建数据库ora-12547错误解决一例
                             AIX中使用DBCA创建数据库ora-12547错误解决一例 Couldnotloadprogramoracledevmdm:Symbolresolutionfailedfor/usr/lib/libc.a[aio_64.o]because:Symbolkaio_rdwr64(number1)isnotexportedfrom......
  • 探索ORACLE之ASM01_概念
    探索ORACLE之ASM01_概念作者:吴伟龙一、    ASM(自动存储管理)的来由:ASM是Oracle10gR2中为了简化Oracle数据库的管理而推出来的一项新功能,这是Oracle自己提供的卷管理器,主要用于替代操作系统所提供的LVM,它不仅支持单实例,同时对RAC的支持也是非常好。ASM可以自动管理磁盘组并提......
  • Crontab 命令详解
    一. Crontab介绍      crontab命令的功能是在一定的时间间隔调度一些命令的执行。1.1/etc/crontab文件      在/etc目录下有一个crontab文件,这里存放有系统运行的一些调度程序。每个用户可以建立自己的调度crontab。      如:[root@dave~]#cat/etc/cro......