管理 .NET 应用程序在终止/终止时正常关闭

2023-11-23

我们有一个具有许多前台线程的 .NET 控制台应用程序。 如果我们使用任务管理器终止进程或从 Windows 命令行发出killjob、kill,是否有一种方法可以优雅地关闭应用程序(在 .net 控制台应用程序中添加托管代码),例如拥有一个函数被称为 TodoBeforeShutdown() 来处理对象、关闭任何打开的连接等。

附: - 我阅读了其他线程,他们都建议了不同的方法来终止进程,而不是我的具体问题,即在 .NET 托管代码中处理终止进程的最佳方法是什么。

提前致谢。


不幸的是,每当进程被终止时,都不会引发您可以处理的事件。
您可以想象终止一个进程,就像切断计算机电源一样——无论您设计在系统关闭时运行什么代码,如果计算机没有正常或正确关闭,该代码就不会运行。

当您使用任务管理器终止进程时,它会调用 Win32TerminateProcess函数,它无条件地强制进程(包括其拥有的所有线程)退出。的执行all线程/进程被停止,所有挂起的 I/O 请求被取消。你的程序实际上已经死了。The TerminateProcess函数不会调用 CLR 提供的关闭序列,因此您的托管应用程序甚至不知道正在关闭。

您建议您在应用程序进程终止时关心处理对象,但这里有一些值得指出的事情:

  • 始终努力将可能造成的损害降到最低。当您用完物品后,请尽早处理掉它们。不要等到以后。在任何给定时间,当程序的进程终止时,您应该只保留最少数量的对象,这将减少泄漏的可能性。

  • 操作系统一般会清理并释放most终止时这些资源(即句柄等)的使用权。

  • 最后,不用说,以这种方式终止进程确实是一种例外情况——即使某些资源泄漏,这是可以预料的。您不应该以这种方式关闭应用程序,就像您不应该终止必要的 Windows 系统进程一样(即使您可以在以管理员身份运行时这样做)。

如果这是您关闭控制台应用程序的常规计划,你需要寻找另一个计划.

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

管理 .NET 应用程序在终止/终止时正常关闭 的相关文章

  • 检查对象是否更改的最佳实践是什么?

    我需要知道如何检查对象是否发生更改 基本上我需要一个名为 TrackChanges 的属性 当我将其设置为 true 一次并且如果该对象中的任何数据被 更改 时 同一对象上的方法 IsObjectChanged 可以返回 true 您是否曾
  • 从 .resx 文件组获取所有可用区域性

    我需要以编程方式列出 resx 文件组中的可用区域性 但 ResourceManager 类似乎没有帮助 我可能有 Labels resx Labels fr FR resx Labels ro RO resx 等等 但是 我如何在运行时找
  • NUnit 与 xUnit

    两者有什么区别NUnit http www nunit org and xUnit net https xunit net 开发其中两个而不是仅一个有什么意义 我读到 xUnit 是由 NUnit 的发明者开发的 xUnit net 是 N
  • 该变量未声明或从未分配警告

    这是基类 public class BaseClass UserControl protected ListView list protected TreeView tree public BaseClass 儿童班 public part
  • 在 VB.NET 中 a = b = 5 - 不可能吗?

    VB NET 中可以这样做吗a b 5 我知道 也是比较运算符 我的意思是做not结果 例如 如果 b 2 a false b 2 然而 在下面的情况下该怎么做呢 不方便在我的代码中引起了这个问题 一些对象a b z由方法中的 ref 传递
  • 数组与列表的性能

    假设您需要一个需要频繁迭代的整数列表 数组 我的意思是非常频繁 原因可能有所不同 但可以说它位于大容量处理的最内层循环的核心 一般来说 人们会选择使用列表 List 因为它们的大小具有灵活性 最重要的是 msdn 文档声称列表在内部使用数组
  • 检查列表是否包含另一个列表。 C#

    编辑 只是说 ContainsAllItem 中的注释解释得最好 很抱歉问这个问题 我知道以前有人问过这个问题 但我只是不明白 好的 所以我想检查一个列表是否包含另一个列表中的所有项目WITHOUT重叠 以及根据类字符串 名称变量 称为项目
  • 在VB6中等待进程退出后恢复窗口

    我在win7 64位操作系统中使用VB6 此应用程序是从 xp 迁移的 Me WindowState vbMinimized WaitForProcess Shell launchapp vbNormalFocus Me WindowSta
  • 为什么WCF中不允许方法重载?

    假设这是一个ServiceContract ServiceContract public interface MyService OperationContract int Sum int x int y OperationContract
  • 我应该如何在 VB.NET 中进行转换?

    所有这些都相等吗 在什么情况下我应该选择其中一个而不是其他 var ToString CStr 变量 CType 变量 字符串 DirectCast 变量 字符串 编辑 来自的建议不是我自己 https stackoverflow com
  • Scrum:太多还是不够? [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我的公司最近开始使用Scrum 我们已经完成了 2 次冲刺 我们仍在学习 但我们确实已经暴露并修复了开发过程中的一些问题 所以总的来说 我
  • 使用 Runtime.getRuntime().exec() 进行重定向不起作用

    我需要从程序执行命令 命令行是可以的 我在终端试了一下 但是在程序中不行 我从我的代码中添加一个副本 File dir new File videos String children dir list if children null Ei
  • 元素属性语法和属性属性语法之间有语义差异吗?

    我认为元素属性语法和属性属性语法在语义上没有太大区别 但是 我发现一定有什么不同 例如 下面的例子只是演示了一个简单的触发器
  • 设置 runat=server 时输入名称和 id 发生变化

    在我的表单中 我需要插入 文本 类型的不同输入 输入必须是带有名称和 ID 的 html 控件 因为我将此表单发送到外部网址 对于验证 我在所有输入中执行 runat server 然后我可以使用 requiredfieldvalidato
  • 将标签文本的一部分设置为粗体

    有什么办法可以使一部分label text要大胆吗 label text asd string 想要string部分要加粗 有可能吗 这怎么办 下面的类说明了如何通过覆盖来做到这一点OnPaint in the LabelWinForms
  • string.Empty 与 null。您使用哪一个?

    最近工作的同事告诉我不要使用string Empty设置字符串变量时但使用null因为它污染了堆栈 他说不做 string myString string Empty but do string mystring null 真的有关系吗 我
  • Directory.Delete 之后 Directory.Exists 有时返回 true ?

    我有非常奇怪的行为 我有 Directory Delete tempFolder true if Directory Exists tempFolder 有时 Directory Exists 返回 true 为什么 可能是资源管理器打开了
  • 确保 StreamReader 不会挂起等待数据

    下面的代码读取从 tcp 客户端流读取的所有内容 并且在下一次迭代中它将仅位于 Read 上 我假设正在等待数据 我如何确保它不会在没有任何内容可供读取时返回 我是否必须设置低超时 并在失败时响应异常 或者有更好的办法吗 TcpClient
  • 获取两个工作日之间的天数差异

    这听起来很简单 但我不明白其中的意义 那么获取两次之间的天数的最简单方法是什么DayOfWeeks当第一个是起点时 如果下一个工作日较早 则应考虑在下周 The DayOfWeek 枚举 http 20 20 5B1 5D 3a 20htt
  • C# 中的合并运算符?

    我想我记得看到过类似的东西 三元运算符 http msdn microsoft com en us library ty67wk28 28VS 80 29 aspx在 C 中 它只有两部分 如果变量值不为空 则返回变量值 如果为空 则返回默

随机推荐

  • iOS 8 YouTube 视频嵌入

    我面临着我似乎无法理解的问题 我的这段代码在 Xcode 5 和 iOS 7 中完美运行 void viewDidLoad super viewDidLoad Do any additional setup after loading th
  • Cookie 过期在 C# 中不起作用

    我尝试使用 C 4 0 和以下代码制作持久 cookie HttpCookie AssoCookie new HttpCookie AssociateCode AssociateCode AssoCookie Expires DateTim
  • GZipStream - 即使使用刷新,写入也不写入所有压缩数据?

    我在针对 Net 3 5 的 gzipstream 方面遇到了一个棘手的问题 这是我第一次使用 gzipstream 但是我根据许多教程进行了建模 包括here我仍然被困住了 我的应用程序将数据表序列化为 xml 并插入到数据库中 将压缩数
  • Python 3 中的 PyClass_New 等效项是什么?

    之前我使用 C API 创建了一些 Python 类 当我要使用 Python 3 构建旧项目时 它会给出以下编译错误 PyClass New was not declared in this scope Py InitModule was
  • 在这种情况下是否有必要调用flush()(JPA接口)?

    因为调用flush 来让每个实体从内存持久化到数据库 因此 如果我使用调用太多不必要的flush 可能会花费很多时间 因此对于性能来说不是一个好的选择 这是一个场景 我不知道什么时候调用flush Order and Item have B
  • 从初始化列表进行就地向量构造(对于带有构造函数参数的类)[重复]

    这个问题在这里已经有答案了 可能的重复 我可以列表初始化仅移动类型的向量吗 编辑1 请考虑重新开放投票 我的问题强调就地建设 移动构造是一种替代方案 但不是这个问题的目的 感谢您的回答 编辑2 由于我无法回答这个问题 它已关闭 我在这里发布
  • 根据任何选定列中的值对 data.table 进行子集化的有效方法[重复]

    这个问题在这里已经有答案了 假设我有一个包含 6 列的 data table library data table set seed 123 dt lt data table id 1 100 p1 sample 1 10 100 repl
  • 使用 Blazor 访问设备摄像头

    我有 Blazor Web Assembly PWA 如何打开设备本机摄像头 我正在尝试编写一个 PWA 来捕获和保存图片 EDIT 想要将捕获的图像以 jpeg 格式保存到 Azure Blob 存储中 您可以通过 HTML 输入来实现此
  • 如何使用 CSS 或 Javascript 创建选取框

    我需要创建两个跨越任意大小的浏览器窗口的选取框 一个带有重复图像 一个带有重复链接 选框项目需要从一开始就显示出来 而不需要几秒钟的时间才能出现在屏幕上 并且每个项目之间的距离大约为 20px 30px 当用户将鼠标悬停在其上时 选取框需要
  • AVAudioRecorder 不会在设备上录制

    这是我的方法 void playOrRecord UIButton sender if playBool YES NSError error nil NSString filePath NSBundle mainBundle pathFor
  • 解决应用内购买缺少促销代码的问题

    Apple 不提供应用内购买的促销代码 让用户免费尝试通过应用内购买解锁的功能或内容 同时遵守 Apple 开发者指南的最佳方式是什么 这个想法是允许一组特殊的用户 评论者 主要粉丝等 无需付费即可访问作为应用内购买提供的内容或功能 解决此
  • 在 Android Activity 中设置全屏亮度

    我正在使用这种方法将屏幕设置为全亮度 SuppressLint NewApi private void setFullBright if Build VERSION SDK INT gt Build VERSION CODES CUPCAK
  • Rails 4:跳过回调

    我的应用程序中有一个拍卖和一个投标对象 当有人按下出价按钮然后它调用投标创建创建出价的控制器 然后对拍卖对象执行一些其他操作 投标控制器 gt 创建 auction endtime auction auctiontimer auction
  • NSMutableArray addObject 不起作用

    我已宣布NSMutableArray categories在我的视图控制器 h 文件中 并为其声明一个属性 In the parser foundCharacters 的方法NSXMLParser在我的 m 文件中 我有以下代码 void
  • 制作简单的 Google Android Maps API v2 项目时 Android Studio 中的编译错误

    最近我迁移到了新Android Studio 集成开发环境基于IntelliJ 我遵循的指南是 https developers google com maps documentation android start 为了 基本 如何在 A
  • Android In App Update 在立即模式下下载 APK 后不安装 APK

    应用程序正在使用立即模式来更新应用程序 它开始下载 APK 但下载 APK 后 它永远不会安装 UI 挂起并显示下载进度 100 立即模式下没有反馈下载已完成 即时模式如何实现app自动下载 安装 重启 我正在使用以下模式以立即模式开始更新
  • C - 可移植地获取类型对齐

    我正在为一种非常简单的语言编写非常小的解释器 它允许简单的结构定义 由其他结构和简单类型组成 如 int char float double 等 我希望字段使用尽可能少的对齐方式 因此使用 max align t 或类似的东西是不可能的 现
  • XHTML 和 &(与号)的编码

    我的网站符合 XHTML Transitional 标准除了一件事 URL 中的 与号 按原样编写 而不是 amp 也就是说 我的页面中的所有 URL 通常都是这样的 a href http www example org page asp
  • 最好使用游标适配器或数组适配器

    我在数据库中存储了大约 100 个时间表 需要根据每周 下周 下个月 逾期时间表等要求基于 Listview 显示它们 是否可以在应用程序启动时加载所有计划并根据用户在阵列适配器中选择的选项 每周 逾期 每月等 显示它们 或者在运行时使用查
  • 管理 .NET 应用程序在终止/终止时正常关闭

    我们有一个具有许多前台线程的 NET 控制台应用程序 如果我们使用任务管理器终止进程或从 Windows 命令行发出killjob kill 是否有一种方法可以优雅地关闭应用程序 在 net 控制台应用程序中添加托管代码 例如拥有一个函数被