c# - 如果后台线程中存在未处理的异常,如何使主进程崩溃
问题描述
我有一个发布者、调度者、订阅者。
发布者通过调度程序向订阅者发布事件。
订阅者是嵌入在 S.exe 中的 com 对象,当特定事件来自 publisher.exe 时,可以从 dispatcher.exe 回调。
我希望订阅者内部的任何异常都会终止 S.exe。
我做了我的调查:
任务,配置可以终止主进程。相关文章, https://docs.microsoft.com/en-us/dotnet/api/system.threading.tasks.taskscheduler.unobservedtaskexception?view=netframework-4.7.2
在我的代码中新建一个线程,无需任何特定配置也可以,线程内任何未处理的异常都可能使主进程崩溃。相关文章, https://docs.microsoft.com/en-us/dotnet/standard/threading/exceptions-in-managed-threads
一个线程的两个属性:{isbackground, isThreadPoolThread}。
- 任务是{true, true}
- 人工线程是 {true, false},
- 订阅者回调线程是 {true, false}。
是否有任何其他配置,例如,可以设置控制是否使主进程崩溃?
解决方案
COM 中的任何异常都被 RCW 包装为 HRESULT 返回给它的客户端。因此,当在 COM 线程中引发异常时,无法使主进程崩溃。
答案可能与: COM 方法通过返回 HRESULT 来报告错误;.NET 方法通过抛出异常来报告它们。运行时处理两者之间的转换。.NET Framework 中的每个异常类都映射到一个 HRESULT。
来自https://docs.microsoft.com/en-us/dotnet/framework/interop/how-to-map-hresults-and-exceptions
和其他有用的链接: https ://docs.microsoft.com/en-us/dotnet/framework/interop/runtime-callable-wrapper
https://docs.microsoft.com/en-us/dotnet/framework/interop/com-callable-wrapper
推荐阅读
- regex - 如何使用正则表达式将行拆分为组,然后仅提取第 7 组?
- node.js - htmlparser2如何用另一个具有相同属性的自定义标签替换标签,该标签具有标签一
- android - ReactNative Expo 应用在 Play 管理中心错误地列出了详细信息
- tomcat - 重新连接的 websocket 无法连接到服务器,FacesContext.getCurrentInstance() 被解析为 null
- python - 模型中的 PyTorch 网络
- mysql - 为 MySQL 中的列选择最近的 3 条记录
- python - 有没有办法使用 Python 检查某个值是否每周出现?
- c# - Automapper 8.0+所有日期时间到UTC
- c++ - 使用 ostringstream 时出现意外行为
- javascript - 如何创建一个在单击 div 后打开的工具提示,并在几秒钟后在 react JS 中删除