新闻中心

.NET中如何处理和捕获全局异常

2025-11-11
浏览次数:
返回列表
针对 .NET Framework 应用可通过 AppDomain.UnhandledException 捕获未处理异常,用于日志记录但无法阻止程序终止;2. WPF 使用 Application.DispatcherUnhandledException、WinForms 使用 Application.ThreadException 处理 UI 线程异常并可阻止崩溃;3. ASP.NET Core 推荐使用 UseExceptionHandler 中间件捕获全局异常并返回统一错误响应;4. 结合 Serilog、NLog 等日志框架可持久化记录异常信息;5. 根据应用类型选择合适机制并测试异常路径以确保日志有效输出。

.net中如何处理和捕获全局异常

在 .NET 应用程序中,全局异常处理是确保程序稳定性和可维护性的关键部分。通过捕获未被处理的异常,可以避免程序意外崩溃,并记录错误信息以便后续分析。以下是几种常见的全局异常捕获方式,适用于不同类型的 .NET 应用。

1. 使用 AppDomain.UnhandledException(适用于 .NET Framework)

对于传统的 .NET Framework 应用(如控制台、WinForms 或 WPF),可以通过订阅 AppDomain.CurrentDomain.UnhandledException 事件来捕获未处理的异常。

示例代码:

AppDomain.CurrentDomain.UnhandledException += (sender, e) =>
{
    var exception = (Exception)e.ExceptionObject;
    // 记录日志或发送通知
    Console.WriteLine($"未处理异常: {exception.Message}");
    Console.WriteLine(exception.StackTrace);
    // 注意:程序仍会终止
};

注意:该事件无法阻止应用程序退出,仅用于日志记录或资源清理。

2. WPF 和 WinForms 中的 UI 线程异常处理

UI 线程上的异常不会触发 AppDomain 的 UnhandledException,需单独处理。

  • WPF:使用 Application.DispatcherUnhandledException
  • WinForms:使用 Application.ThreadException
WPF 示例:

Application.Current.DispatcherUnhandledException += (sender, e) =>
{
    e.Handled = true; // 阻止程序崩溃
    MessageBox.Show("发生错误:" + e.Exception.Message);
};

WinForms 示例:

Application.ThreadException += (sender, e) =>
{
    MessageBox.Show("UI 错误:" + e.Exception.Message);
    e.Handled = true;
};

3. ASP.NET Core 中的全局异常处理

在 ASP.NET Core 中,推荐使用中间件来处理异常。

千鹿Pr助手 千鹿Pr助手

智能Pr插件,融入众多AI功能和海量素材

千鹿Pr助手 128 查看详情 千鹿Pr助手
  • 使用 UseExceptionHandler 启用异常处理中间件
  • 结合 ILogger 记录详细信息
配置示例(Program.cs 或 Startup.cs):

app.UseExceptionHandler(errorApp =>
{
    errorApp.Run(async context =>
    {
        context.Response.StatusCode = 500;
        context.Response.ContentType = "application/json";
        var feature = context.Features.Get();
        if (feature != null)
        {
            await context.Response.WriteAsync(new
            {
                error = feature.Error.Message
            }.ToString());
        }
    });
});

4. 使用第三方日志框架集成

结合 Serilog、NLog 或 log4net 可以更高效地记录全局异常。

  • 在异常事件中调用日志组件写入文件或发送到远程服务
  • 包含时间、堆栈、用户信息等上下文数据

例如,在 UnhandledException 中添加:
logger.Error(exception, "全局异常被捕获");

基本上就这些。根据应用类型选择合适的全局异常处理机制,能显著提升系统的健壮性。不复杂但容易忽略的是:记得测试异常路径,确保日志能正确输出。

以上就是.NET中如何处理和捕获全局异常的详细内容,更多请关注其它相关文章!


# 的是  # 衡水互联网营销推广服务  # 株洲互联网营销推广  # 忻州网站建设创造辉煌  # seo前后端分离项目  # 做网站推广客服  # 名优营销推广中心招聘  # 泰安网站建设服务有什么  # 成都网络营销推广合作  # 鞍山网站建设工作推荐  # 网站优化高端定制平台  # 中文网  # 可以通过  # 相关文章  # .net  # 应用程序  # 未处理  # 数据结构  # 适用于  # 推荐使用  # 如何处理  # win  # ai  #   # app  # json  # js  # 全局异常 


相关栏目: 【 科技资讯46185 】 【 网络学院92790


相关推荐: Composer的 archive 命令怎么用_快速打包你的PHP项目及其Composer依赖  composer 和 npm/yarn 在管理依赖方面有什么核心思想差异?  Win11网速慢怎么解决 Win11网络设置优化解除限速  TikTok搜索不到用户发布内容怎么办 TikTok用户内容搜索优化方法  在J*a中如何使用Exception包装底层异常_异常包装与信息传递方法说明  J*a TimerTask中HashMap意外清空的深层原因与解决方案  12306怎么选座位选到安静区_12306选座安静区域选择策略  优化MinIO list_objects_v2 操作的性能瓶颈与最佳实践  使用 Pandas 高效处理 .dat 文件:字符清理与数据计算  黑鲨3Pro怎样在相册开漫画风滤镜_iPhone黑鲨3Pro相册开漫画风滤镜【趣味滤镜】  《刺客信条:影》PS5 Pro和Switch 2画面对比  百度浏览器字体显示异常偏小_百度浏览器字体渲染修复方案  Sublime怎么配置Nim语言环境_Sublime Nim代码高亮与补全  优化 Python 函数中的条件逻辑:解决 if-else 嵌套与参数选择问题  KFC游戏互动怎么赢取优惠券_KFC线上游戏活动参与与优惠代码赢取教程  如何将HTML表格多行数据保存到Google Sheets  C++如何实现线程池_C++11手动实现一个简单的固定大小线程池  python3时间如何用calendar输出?  《明末:渊虚之羽》设计师谈设计角色:那会刚毕业 充满激情  天眼查企业查询官网入口 天眼查官方网页版查询  Yandex搜索引擎官方地址 俄罗斯网络世界的主要入口  Golang如何优化CPU绑定任务分配策略_Golang CPU任务分配优化实践  如何高效处理PHP中的Excel数据导入导出?PortPHP/Spreadsheet助你轻松搞定!  千牛数据看板网页版_千牛数据看板网页版访问方法  蛙漫官方正版入口 蛙漫网页在线全集免费观看  服务端验证_j*ascript输入检查  Win11怎么修改默认浏览器_Windows 11设置Chrome为默认  高德地图沿途添加点失败如何解决 高德多点规划方法  Golang如何实现容器化日志收集与分析_Golang容器日志收集分析方法  Win10双系统截图高效法 截屏快捷键速记【技巧】  Yandex官网搜索引擎免登录_俄罗斯Yandex一键直达入口  163邮箱注册官网 免费申请163个人邮箱  AO3同人作品网入口 AO3搜索引擎官网永久地址  在J*a中如何开发在线活动报名与管理系统_活动报名管理项目实战解析  漫画星球免费下拉式入口 漫画星球免费漫画在线阅读网站  j*a toString()的覆盖  PHP中SSG-WSG API的AES加密实践:正确使用初始化向量  一加手机拍照效果不好怎么办 一加哈苏影像调校与专业模式使用教程【高手篇】  c++中的std::forward_list和std::list有什么不同_c++ forward_list与list区别分析  如何使用spryker/configurable-bundles-products-resource-relationship模块解决复杂产品捆绑关系难题  J*a实现学校排课程序_面向对象结构化项目示例  极速漫画官方主页网址 极速漫画漫画在线浏览官网链接  手机CPU怎么影响游戏体验_手机CPU对游戏性能的影响分析  J*aScript中向JSON对象添加新属性的正确姿势  怎么在mac上运行html代码_mac运行html代码方法【指南】  如何将HTML表格多行数据保存到Google Sheet  Kafka Streams中基于消息头条件过滤消息的实现指南  微信网页版官方快速登录入口 微信网页版网页版账号直达  三星GalaxyZFold5怎样在相册制作折叠屏分镜_iPhone三星GalaxyZFold5相册制作折叠屏分镜【创意编辑】  Web Components中自定义开关组件状态同步的常见陷阱与解决方案 

搜索