事件的异常处理

2023-11-27

如果这是一个简单的问题,我深表歉意(我的 Google-Fu 今天可能很糟糕)。

想象一下这个 WinForms 应用程序,它具有这种类型的设计:主应用程序 -> 显示一个对话框 -> 第一个对话框可以显示另一个对话框。两个对话框都有确定/取消按钮(数据输入)。

我试图找出某种类型的全局异常处理,沿着 Application.ThreadException 的思路。我的意思是:

每个对话框都有一些事件处理程序。第二个对话框可能有:

private void ComboBox_SelectedIndexChanged(object sender, EventArgs e)
{
    try
    {      
        AllSelectedIndexChangedCodeInThisFunction();
    }
    catch(Exception ex)
    {
        btnOK.enabled = false;  // Bad things, let's not let them save
        // log stuff, and other good things
    }
}

实际上,该对话框中的所有事件处理程序都应该以这种方式处理。这是一个例外情况,所以我只想记录所有相关信息,显示一条消息,并禁用该对话框的“确定”按钮。

但是,我想避免在每个事件处理程序中尝试/捕获(如果可以的话)。所有这些 try/catch 的缺点是:

private void someFunction()
{
    // If an exception occurs in SelectedIndexChanged,
    // it doesn't propagate to this function
    combobox.selectedIndex = 3; 
}

我不相信 Application.ThreadException 是一个解决方案,因为我不希望异常一直回到第一个对话框,然后回到主应用程序。我不想关闭应用程序,我只想记录它,显示一条消息,然后让它们从对话框中取消。他们可以决定从那里做什么(也许去应用程序中的其他地方)。

基本上,第一个对话框和第二个对话框之间有一个“全局处理程序”(然后,我想,主应用程序和第一个对话框之间有另一个“全局处理程序”)。


是的,Application.ThreadException 的默认处理是一个错误。不幸的是,这是一个必要的错误,需要避免立即阻止和绝望成千上万编写他们的第一个 Windows 窗体应用程序的程序员。

您正在考虑的解决方案并不是解决问题,它很有可能使情况变得更糟。虽然用户单击异常对话框上的“继续”按钮是一个值得怀疑的结果,但在全局异常处理程序中吞下异常则更糟糕。

Yes, do为 ThreadException 编写一个替换处理程序。让它在消息框中显示 e.Exception.ToString() 的值,以便用户了解发生了什么问题。然后发送电子邮件或附加到错误日志中,以便you知道出了什么问题。然后调用Environment.FailFast(),这样就不会造成更多损坏。

对 AppDomain.CurrentDomain.UnhandledException 执行相同的操作。它不会得到太多的锻炼。

使用反馈来改进您的代码。您会发现哪里需要验证。您可以帮助客户的 IT 员工诊断其 LAN 和设备的故障。您会发现在极少数情况下您自己的 try/catch 块可能能够从异常中恢复。

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

事件的异常处理 的相关文章

  • std::cout 和 std::wcout 有什么区别?

    在c 中 有什么区别std cout and std wcout 它们都控制流缓冲区的输出或将内容打印到控制台 或者它们只是相似吗 它们作用于不同的字符类型 std cout uses char作为字符类型 std wcout uses w
  • 如何在 C# 中从 UNIX 纪元时间转换并考虑夏令时?

    我有一个从 unix 纪元时间转换为 NET DateTime 值的函数 public static DateTime FromUnixEpochTime double unixTime DateTime d new DateTime 19
  • 在新的浏览器进程中打开 URL

    我需要在新的浏览器进程中打开 URL 当浏览器进程退出时我需要收到通知 我当前使用的代码如下 Process browser new Process browser EnableRaisingEvents true browser Star
  • 如何访问另一个窗体上的ListView控件

    当单击与 ListView 所在表单不同的表单中的按钮时 我试图填充 ListView 我在 Form1 中创建了一个方法以在 Form2 中使用 并将参数传递给 Form1 中的方法 然后填充 ListView 当我调试时 我得到了传递的
  • C++中的类查找结构体数组

    我正在尝试创建一个结构数组 它将输入字符串链接到类 如下所示 struct string command CommandPath cPath cPathLookup set an alarm AlarmCommandPath send an
  • 存储来自其他程序的事件

    我想将其他应用程序的事件存储在我自己的应用程序中 事件示例 打开 最小化 Word 或打开文件时 这样的事可能吗 运行程序 http msdn microsoft com en us library ms813609 aspx and 打开
  • 关于在 Windows 上使用 WiFi Direct Api?

    我目前正在开发一个应用程序 我需要在其中创建链接 阅读 无线网络连接 在桌面应用程序 在 Windows 10 上 和平板电脑 Android 但无关紧要 之间 工作流程 按钮 gt 如果需要提升权限 gt 创建类似托管网络的 WiFi 网
  • Rx 中是否有与 Task.ContinueWith 运算符等效的操作?

    Rx 中是否有与 Task ContinueWith 运算符等效的操作 我正在将 Rx 与 Silverlight 一起使用 我正在使用 FromAsyncPattern 方法进行两个 Web 服务调用 并且我想这样做同步地 var o1
  • 如何将整数转换为 void 指针?

    在 C 中使用线程时 我面临警告 警告 从不同大小的整数转换为指针 代码如下 include
  • 批量更新 SQL Server C#

    我有一个 270k 行的数据库 带有主键mid和一个名为value 我有一个包含中值和值的文本文件 现在我想更新表格 以便将每个值分配给正确的中间值 我当前的方法是从 C 读取文本文件 并为我读取的每一行更新表中的一行 必须有更快的方法来做
  • Visual Studio 中的测试单独成功,但一组失败

    当我在 Visual Studio 中单独运行测试时 它们都顺利通过 然而 当我同时运行所有这些时 有些通过 有些失败 我尝试在每个测试方法之间暂停 1 秒 但没有成功 有任何想法吗 在此先感谢您的帮助 你们可能有一些共享数据 检查正在使用
  • 如何在 Blackberry Cascades 中显示具有特定号码的电话板

    我正在使用带有 C QT 和 QML 的 Blackberry Cascades 10 Beta 3 SDK 以及 Blackberry 10 Dev Alpha Simulator 和 QNX Momentics IDE 并且我正在尝试实
  • 将 log4net 与 Autofac 结合使用

    我正在尝试将 log4net 与 Autofac 一起使用 我粘贴了这段代码http autofac readthedocs org en latest examples log4net html http autofac readthed
  • C++ 密码屏蔽

    我正在编写一个代码来接收密码输入 下面是我的代码 程序运行良好 但问题是除了数字和字母字符之外的其他键也被读取 例如删除 插入等 我知道如何避免它吗 特q string pw char c while c 13 Loop until Ent
  • 用于 C# 的 TripleDES IV?

    所以当我说这样的话 TripleDES tripledes TripleDES Create Rfc2898DeriveBytes pdb new Rfc2898DeriveBytes password plain tripledes Ke
  • Process.Start() 方法在什么情况下返回 false?

    From MSDN https msdn microsoft com en us library e8zac0ca v vs 110 aspx 返回值 true 表示有新的进程资源 开始了 如果由 FileName 成员指定的进程资源 St
  • 有没有办法强制显示工具提示?

    我有一个验证字段的方法 如果无法验证 该字段将被清除并标记为红色 我还希望在框上方弹出一个工具提示 并向用户显示该值无效的消息 有没有办法做到这一点 并且可以控制工具提示显示的时间 我怎样才能让它自己弹出而不是鼠标悬停时弹出 If the
  • 使用 GhostScript.NET 打印 PDF DPI 打印问题

    我在用GhostScript NET http ghostscriptnet codeplex com打印 PDF 当我以 96DPI 打印时 PDF 打印效果很好 但有点模糊 如果我尝试以 600DPI 打印文档 打印的页面会被极大地放大
  • 当另一个线程可能设置共享布尔标志(最多一次)时,是否可以读取共享布尔标志而不锁定它?

    我希望我的线程能够更优雅地关闭 因此我尝试实现一个简单的信号机制 我不认为我想要一个完全事件驱动的线程 所以我有一个工作人员有一种方法可以使用关键部分优雅地停止它Monitor 相当于C lock我相信 绘图线程 h class Drawi
  • 防止在工厂方法之外实例化对象

    假设我有一个带有工厂方法的类 class A public static A newA Some code logging return new A 是否可以使用 a 来阻止此类对象的实例化new 那么工厂方法是创建对象实例的唯一方法吗 当

随机推荐

  • R 中的轮廓图

    我有一组数据 其中包含 项目 关联簇 轮廓系数 如有必要 我可以使用更多信息进一步扩充该数据集 我想在 R 中生成轮廓图 我在这方面遇到了麻烦 因为我遇到的示例使用内置的 kmeans 或相关 聚类函数并绘制结果 我想绕过此步骤并为我自己的
  • 如何在 php.ini 中启用 oci8 (Oracle) 扩展 - PHP 警告:PHP 启动:第 0 行未知

    我有 Windows XP 最近安装了 wamp apache mysql php 32 位 我测试了安装 使用 php 和 apache 连接到 mysql 数据库 一切正常 现在我需要连接到 Oracle 数据库 因此我尝试启用一些扩展
  • jquery on 带/不带选择器参数和 jquery delegate 有什么区别?

    我正在使用jquery 1 10 我想知道这三个函数有什么区别 哪个功能更好 为什么 委托功能的目的是什么 dropdown menu on click show opt menu function alert hello dropdown
  • 毕加索图像缓存

    我想下载以下带有毕加索图像缓存的图像下载代码 DownloadImage downloadImage new DownloadImage downloadImage execute advert getImgUrl private clas
  • 在 SwiftUI 中使用时间间隔的 DatePicker

    我想在 SwiftUI 中使用 DatePicker 它工作正常并且符合预期 我想添加一个时间间隔 如所解释的 UIDatePicker 15 分钟增量 Swift DatePicker Please enter a time select
  • 2 个不同的小查询与 1 个带子查询的查询

    我有这样的桌子 name personal number Jon 222 Alex 555 Jon 222 Jimmy 999 我需要获取每个名字 其中个人号码在表中重复超过 1 个 即结果必须是 Jon Jon 因此 变体 1 SELEC
  • Django:覆盖 get_FOO_display()

    一般来说 我不熟悉 python 重写方法和使用 super 的方式 问题是 我可以覆盖get FOO display class A models Model unit models IntegerField choices someth
  • render_to_string 和 response.content.decode() 不匹配

    我正在写我的第一个Django跟随本书一起学习应用程序 http chimera labs oreilly com books 1234000000754 ch05 html passing python variables to be r
  • .htaccess 拒绝所有人不起作用

    我的问题是我想拒绝对文件夹的访问 但我不能 我已经放了一个 htaccess此文件夹中的文件仅包含以下几行 order deny allow deny from all 知道会发生什么吗 我得到它 这是由于 apache 配置造成的 在我的
  • 解决日期时间许可证问题的最佳方法[关闭]

    Closed 这个问题需要多问focused 目前不接受答案 目前我们正在开发一个基于 Windows 的小型应用程序 我们曾经提供为期30天的试用版许可证 30天到期后 该产品将无法使用 现在这是我的问题 想象一下 客户于 1 月 1 日
  • Codeigniter - 会话过期和“记住我”功能

    我正在 Codeigniter 中构建 记住我 功能 通常我会看到库 项目使用令牌在用户上设置 cookie 该令牌会保存在数据库中 并在用户每次访问网站时进行比较 在 Codeigniter 中 我们可以设置会话过期时间 这导致我尝试不同
  • 为什么 System.arraycopy 是 Java 原生的?

    我很惊讶地在 Java 源代码中看到 System arraycopy 是一个本机方法 当然原因是因为它更快 但是代码能够使用哪些本地技巧来使其速度更快呢 为什么不直接循环原始数组并将每个指针复制到新数组 当然这不是那么慢和麻烦 在本机代码
  • Firebase 管理多个身份验证提供商

    我正在开发 Android 应用程序 该应用程序在 Facebook Google 和电子邮件 密码等 Firebase 的帮助下使用多重身份验证 每个身份验证都以不同的方式运作良好 但是 当我使用 google 登录然后注销时 以及稍后当
  • 使用 python 定义 chromedriver selenium 的下载目录

    一切都在标题中 有没有办法定义与 python 一起使用的 selenium chromedriver 的下载目录 尽管进行了很多研究 但我还没有找到结论性的东西 作为一个新手 我已经看到了很多关于 Chromedriver 的 所需功能
  • WPF TabControl 在 SelectionChanged 上,将焦点设置到文本字段

    我有一个选项卡控件和一些选项卡项 我正在成功收听SelectionChanged事件 并检查我感兴趣的选项卡是否是当前选定的选项卡 我正在使用这段代码 如下 并单步执行调试器 我可以看到我的分支逻辑按设计工作 但是 我遇到的问题是有些东西覆
  • ElasticSearch Java 客户端查询嵌套对象

    我如何转换这种查询 query nested path consultations query bool must match consultations prescriptions alfuorism match consultation
  • 在列表视图中滚动地图时如何避免滚动列表视图

    我有一个 ListView 在其顶部有一个地图 我希望当 ListView 滚动时地图滚动到视图之外 但我也希望用户能够与地图交互 因此 滚动应该仅在用户在其他 ListView 小部件上滚动时发生 而不是在他们在地图上滚动时发生 然后我希
  • 如何在运行时将字符串转换为代码

    我正在生成包含的字符串if else表达式 我想知道我是否可以在运行时执行这个表达式 这是一个例子 string s if x gt 10 Fly true else Fly False Execute s 有可能做到这一点吗 可以使用TC
  • Spring MVC 3 中的 Restful 路径参数

    是否可以 在 servlet xml 文件的 mvc view controller 元素或控制器方法中设置 URI 模板 然后使用 获取该路径参数in a jsp 我知道在控制器方法中使用 PathVariable 将使我能够访问路径参数
  • 事件的异常处理

    如果这是一个简单的问题 我深表歉意 我的 Google Fu 今天可能很糟糕 想象一下这个 WinForms 应用程序 它具有这种类型的设计 主应用程序 gt 显示一个对话框 gt 第一个对话框可以显示另一个对话框 两个对话框都有确定 取消