如何正确捕获 WinForms 应用程序中所有未处理的异常

2023-12-24

我想为 WinForms 应用程序中任何线程的所有未处理异常设置处理程序方法。我自己不创建任何应用程序域。

根据未处理的异常 https://msdn.microsoft.com/en-us/library/system.appdomain.unhandledexception.aspx文档,我需要设置UnhandledExceptionMode.ThrowException模式通过Application.SetUnhandledExceptionMode也捕获主线程异常的方法:

在使用 Windows 窗体的应用程序中,未处理的异常 主应用程序线程导致 Application.ThreadException 事件 被抚养。如果处理此事件,则默认行为是 未处理的异常不会终止应用程序,尽管 应用程序处于未知状态。在这种情况下, 未引发 UnhandledException 事件。这种行为是可以改变的 通过使用应用程序配置文件,或通过使用 Application.SetUnhandledExceptionMode 方法将模式更改为 ThreadException 事件之前的 UnhandledExceptionMode.ThrowException 处理程序已连接。这仅适用于主应用程序 线。对于未处理的情况会引发 UnhandledException 事件 其他线程中抛出的异常

因此,生成的代码将如下所示:

    public static void UnhandledExceptionEventHandler(object sender, UnhandledExceptionEventArgs e)
    {
        // ...
    }

    [STAThread]
    static void Main(string[] args)
    {
        Application.SetUnhandledExceptionMode(UnhandledExceptionMode.ThrowException);
        AppDomain.CurrentDomain.UnhandledException += new UnhandledExceptionEventHandler(UnhandledExceptionEventHandler);

        Application.EnableVisualStyles();
        Application.SetCompatibleTextRenderingDefault(false);
        Application.Run(new MainForm(pathToCheck));
    }

可以吗?它会捕获来自任何线程(包括主线程、UI线程和由它创建的所有线程)的所有未处理的异常吗?Task班级)?我正确理解了文档吗?

是的,我看到了类似的问题this https://stackoverflow.com/questions/5762526/how-can-i-make-something-that-catches-all-unhandled-exceptions-in-a-winforms-a在这里,但我不明白为什么我还应该使用以下代码:

Application.ThreadException += new     
  ThreadExceptionEventHandler(ErrorHandlerForm.Form1_UIThreadException);

您应该订阅这两个事件。请注意,即使这样也不会自动捕获来自其他线程的所有内容。例如,当异步调用委托时,仅当以下情况时,异常才会传播到调用者线程:EndInvoke叫做。

    [STAThread]
    static void Main(string[] args)
    {
        AppDomain.CurrentDomain.UnhandledException +=
            (sender, args) => HandleUnhandledException(args.ExceptionObject as Exception);
        Application.ThreadException +=
            (sender, args) => HandleUnhandledException(args.Exception);
    }

    static void HandleUnhandledException(Exception e)
    {
        // show report sender and close the app or whatever
    }
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何正确捕获 WinForms 应用程序中所有未处理的异常 的相关文章

  • 无法继承形状

    为什么我不能使用继承 a 的类Shapes class http msdn microsoft com en us library ms604615 28v vs 90 29 我需要延长Rectangle具有一些方法的类 但我想以与使用相同
  • 在 C++ 代码中转换字符串

    我正在学习 C 并开发一个项目来练习 但现在我想在代码中转换一个变量 字符串 就像这样 用户有一个包含 C 代码的文件 但我希望我的程序读取该文件并插入将其写入代码中 如下所示 include
  • Android NDK 代码中的 SIGILL

    我在市场上有一个 NDK 应用程序 并获得了有关以下内容的本机崩溃报告 SIGILL信号 我使用 Google Breakpad 生成本机崩溃报告 以下是详细信息 我的应用程序是为armeabi v7a with霓虹灯支持 它在 NVIDI
  • Makefile 和 .Mak 文件 + CodeBlocks 和 VStudio

    我对整个 makefile 概念有点陌生 所以我对此有一些疑问 我正在 Linux 中使用 CodeBlocks 创建一个项目 我使用一个名为 cbp2mak 的工具从 CodeBlocks 项目创建一个 make 文件 如果有人知道更好的
  • C# 根据当前日期传递日期时间值

    我正在尝试根据 sql server 中的两个日期获取记录 Select from table where CreatedDate between StartDate and EndDate我通过了5 12 2010 and 5 12 20
  • Libev,如何将参数传递给相关回调

    我陷入了 libev 中争论的境地 通常 libev 在类似的函数中接收包 接收回调 没关系 但是实际操作中 我们需要派遣一个亲戚 写回调 根据收到的包裹处理具体工作 例如 S RECV MSG pstRecvMsg S RECV MSG
  • 如何在 NLog 中记录网络目标的异常

    我正在使用NLog http nlog project org日志框架 并尝试获取任何 UDP 记录器应用程序中显示的异常和堆栈跟踪信息 例如Sentinel http sentinel codeplex com and Log2控制台 h
  • LinkLabel 无下划线 - Compact Framework

    我正在使用 Microsoft Compact Framework 开发 Windows CE 应用程序 我必须使用 LinkLabel 它必须是白色且没有下划线 因此 在设计器中 我将字体颜色修改为白色 并在字体对话框中取消选中 下划线
  • C# 获取数据表中所有重复行的计数

    我通过运行存储过程来填充数据集 并且从数据集中填充数据表 DataSet RawDataSet DataAccessHelper RunProcedure storedprocedureName this will just return
  • 如何在 Javascript 中连接 C# ActiveX 事件处理程序

    我尝试使用几个代码片段将 ActiveX 对象与 Javascript 事件处理程序挂钩 我无法确定为什么事件处理程序没有被调用 带有项目的 Github 存储库 https github com JesseKPhillips Csharp
  • 让网络摄像头在 OpenCV 中工作

    我正在尝试让我的网络摄像头在 Windows 7 64 位中的 OpenCV 版本 2 2 中捕获视频 但是 我遇到了一些困难 OpenCV 附带的示例二进制文件都无法检测到我的网络摄像头 最近我发现这篇文章表明答案在于重新编译一个文件 o
  • 我们可以通过指针来改变const定义的对象的值吗?

    include
  • 如何从 Boost.PropertyTree 复制子树

    我有一些boost property tree ptree 我需要树来删除一些具有特定标签名称的元素 例如 xml 表示源ptree如下
  • MySQL 连接器 C++ 64 位在 Visual Studio 2012 中从源代码构建

    我正在尝试建立mySQL 连接器 C 从源头在视觉工作室2012为了64 bit建筑学 我知道这取决于一些boost头文件和C 连接器 跑步CMake生成一个项目文件 但该项目文件无法编译 因为有一大堆非常令人困惑的错误 这些错误可能与包含
  • SQLAPI++ 的免费替代品? [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 是否有任何免费 也许是开源 的替代品SQLAPI http www sqlapi com 这个库看起来
  • 当Model和ViewModel一模一样的时候怎么办?

    我想知道什么是最佳实践 我被告知要始终创建 ViewModel 并且永远不要使用核心模型类将数据传递到视图 这就说得通了 让我把事情分开 但什么是Model 和ViewModel一模一样 我应该重新创建另一个类还是只是使用它 我觉得我应该重
  • .NET 和 Mono 之间的开发差异

    我正在研究 Mono 和 NET C 将来当项目开发时我们需要在 Linux 服务器上运行代码 此时我一直在研究 ASP NET MVC 和 Mono 我运行 Ubuntu 发行版 想要开发 Web 应用程序 其他一些开发人员使用 Wind
  • 如何获取带有某个属性注释的所有属性?

    我刚刚从 Roslyn 开始 我想找到所有用属性名称 OneToOne 注释的属性 我启动了 SyntaxVisualizer 并能够获取对该节点的引用 但我想知道是否有更简单的方法来实现此目的 这就是我所拥有的 var prop docu
  • winform c# 中的弹出窗口

    我正在开发一个需要弹出窗口的项目 但问题是我还希望能够通过表单设计器在此弹出窗口中添加文本框等 所以基本上我有一个按钮 当您单击它时 它将打开我在表单设计器中设计的另一个窗口 我一直在谷歌搜索 但还没有找到我需要的东西 所以我希望你们能帮助
  • 嵌入式linux编写AT命令

    我在向 GSM 模块写入 AT 命令时遇到问题 当我使用 minicom b 115200 D dev ttySP0 term vt100 时它工作完美 但我不知道如何在 C 代码中做同样的事情 我没有收到任何错误 但模块对命令没有反应 有

随机推荐

  • 数据转换(收集?)

    我有以下内容 id a b c d 1 10 20 33 42 2 30 20 32 42 3 34 24 35 32 4 32 24 35 25 5 22 14 35 36 但我宁愿以这种形式 只有列 a 和 b id aOrB valu
  • 在 C# Azure 函数 (v2) 中使用来自 Azure Key Vault 的不可导出客户端证书

    我正在尝试设置对外部 API 的客户端证书身份验证 这不可出口的客户端证书位于 Azure Key Vault 中 我的代码是应用服务计划中托管的 Azure v2 函数中的 C NET Core 由于客户端证书不可导出 因此我无法将其放入
  • 在apache中添加标头

    我在这台服务器上有 apache 和许多图像 例如 http test com images abc jpg我希望有可能这样做 如果用户像这样访问网址http test com images download abc jpgapache必须
  • 重新定位法律标签 ( MKAttributionLabel )

    我想将法律标签移至右侧 在 iOS 6 和 7 上 以下解决方案工作正常 但在 iOS 8 3 上似乎不起作用 我得到标签 然后用一个计时器 0 1秒 viewDidLayoutSubviews我称这个方法为 void moveLegalL
  • 我应该使用线程还是任务 - 多客户端模拟

    我正在编写一个客户端模拟程序 其中所有模拟客户端都针对服务器运行一些预定义的例程 这是一个在天蓝色中运行的具有四个实例的 Web 服务器 所有模拟客户端在连接到服务器后都运行相同的例程 任何时候我都想使用我的程序模拟 300 到 800 个
  • 将带点的线添加到 ggplot2 中的绘图中

    为了方便起见 我想编写一个函数 将线图和散点图添加到现有的图中 我定义 addlinetoplot lt function dataset varx vary p lt geom line data dataset aes string x
  • 如何使用express-validator npm 验证密码

    我正在使用 Node 和 Express Web 模块编写 REST API 为了验证我正在使用快速验证器npm 我想在密码字段上应用一些验证规则 如何使用快速验证器来实现它 我想申请密码的验证规则为 最小 8 个字符长 至少一个大写字母
  • MVC 3:将用户控件添加到 Razor 视图

    我有一个 DLL 其中包含一个用户控件 在 Web 窗体视图中我可以通过使用轻松使用它 但如何在 Razor 视图中执行此操作呢 您无法将服务器端控件添加到 Razor 视图 一般来说 在 ASP NET MVC 应用程序中这样做是非常糟糕
  • 如何在一个 git 存储库中查找最新的提交?

    我有一个git存储库 有很多分支很多提交 我想找到最新的10个提交 如何做到这一点 谢谢 如果你想提交所有分支 你需要 all 参数 用 10 将 git log 限制为 10 并使用 date order 告诉 git log 根据日期对
  • 从 S3 wagtail 提供静态文件和媒体文件

    我们将开始使用 S3 来托管我们的静态和媒体文件 有谁有一个很好的链接来描述如何用鹡鸰做到这两点 我们正在使用 Wagtail 1 9 我无法让他们两个同时工作 https wagtail io blog amazon s3 for med
  • Android 5.1.1 及更高版本 - getRunningAppProcesses() 仅返回我的应用程序包

    看来谷歌终于关闭了获取当前前台应用程序包的所有大门 棒棒糖更新后 杀死了getRunningTasks int maxNum http developer android com intl zh cn reference android a
  • 根据R和plotly中的范围制作堆积条形图

    我想在 R 中创建一个堆积条形图并使用 iris 数据集绘制 在 x 轴中 我想在代码中设置像下面的 iris limits 这样的限制 y 轴应该包含适合这些范围的所有 Sepal Length 值 我想将这些值作为单个向量传递 另外 如
  • 使用哈希图创建文本字数统计

    我正在尝试创建一个程序作为我自己的哈希图教程 我要求用户输入文本并尝试将其拆分为哈希图 然后如果单词重复则增加计数 这是我的程序 import java util import java lang import javax swing JO
  • 找出将 n 表示为两个有边界整数之和的方法数

    我正在玩 codefight 但我真的被困住了 到下面的有效问题 Problem 给定整数 n l 和 r 找到将 n 表示为两个整数 A 和 B 之和的方法数 使得 l A B r Example 对于 n 6 l 2 且 r 4 输出应
  • 从AWS S3下载文件时的文件编码问题

    我在 AWS S3 中有一个 CSV 文件 我试图在本地临时文件中打开该文件 这是代码 s3 Aws S3 Resource new bucket s3 bucket bucket name obj bucket object object
  • Linux 中的安全 Python 环境

    是否可以创建一个在Linux下安全运行任意Python脚本的环境 这些脚本应该是从不受信任的人那里收到的 并且可能太大而无法手动检查 一个非常暴力的解决方案是创建一个虚拟机并在每次启动不受信任的脚本后恢复其初始状态 太贵了 我想知道是否可以
  • C# 字典 ValueOrNull / ValueorDefault

    目前我正在使用 var x dict ContainsKey key dict key defaultValue 我想要某种方法让字典 key 对于不存在的键返回null 所以我可以写类似的东西 var x dict key default
  • QMessageBox.Yes/QMessageBox.No 的值

    我学习 PyQt5 对我来说看起来很复杂 我想知道为什么QMessageBox Yes 或没有 有一些特殊的价值 对我来说是16384 这就是我的意思 from PyQt5 import QApplication QWidget QMess
  • XNA BlendState 与 SpriteBatch

    我们需要一个 BlendState 来充当以下角色 透明 PNG 按预期绘制 保留其后面的任何内容 We use Color White按原样绘制 PNG 我们将改变颜色的 Alpha 通道来改变纹理的 不透明度 为了达到这个效果 Blen
  • 如何正确捕获 WinForms 应用程序中所有未处理的异常

    我想为 WinForms 应用程序中任何线程的所有未处理异常设置处理程序方法 我自己不创建任何应用程序域 根据未处理的异常 https msdn microsoft com en us library system appdomain un