首页 > 编程语言 >C# winform统一异常处理

C# winform统一异常处理

时间:2022-12-08 10:01:30浏览次数:57  
标签:C# AppendLine System Application sb using 异常 winform

C# winform统一异常处理

参考:https://www.easck.com/cos/2022/0920/1029476.shtml

源码

using PersistenceLayer;
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Reflection;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using Zian.Forms;

namespace Zian
{
    static class Program
    {
        /// <summary>
        /// 应用程序的主入口点。
        /// </summary>
        [STAThread]
        static void Main()
        {
            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(false);
            Setting.Instance().DatabaseMapFile = Path.Combine(Environment.CurrentDirectory, "Resource", "DatabaseMap.xml");
            BindExceptionHandler();
            using (Form_Login login = new Form_Login())
            {
                login.ShowDialog();
                if (login.DialogResult == DialogResult.OK)
                {
                    login.Dispose();
                    Application.Run(new Form_Dashboad());
                }
                else if (login.DialogResult == DialogResult.Cancel)
                {
                    login.Dispose();
                    return;
                }
            }
        }

        /// <summary>
        /// 绑定程序中的异常处理
        /// </summary>
        private static void BindExceptionHandler()
        {
            //设置应用程序处理异常方式:ThreadException处理
            Application.SetUnhandledExceptionMode(UnhandledExceptionMode.CatchException);
            //处理UI线程异常
            Application.ThreadException += new System.Threading.ThreadExceptionEventHandler(Application_ThreadException);
            //处理未捕获的异常
            AppDomain.CurrentDomain.UnhandledException += new UnhandledExceptionEventHandler(CurrentDomain_UnhandledException);
        }

        /// <summary>
        /// 处理UI线程异常
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private static void Application_ThreadException(object sender, System.Threading.ThreadExceptionEventArgs e)
        {
            string str = GetExceptionMsg(e.Exception, e.ToString());
            MessageBox.Show(str, "系统错误", MessageBoxButtons.OK, MessageBoxIcon.Error);
        }

        /// <summary>
        /// 处理未捕获的异常
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private static void CurrentDomain_UnhandledException(object sender, UnhandledExceptionEventArgs e)
        {
            string str = GetExceptionMsg(e.ExceptionObject as Exception, e.ToString());
            MessageBox.Show(str, "系统错误", MessageBoxButtons.OK, MessageBoxIcon.Error);
        }

        /// <summary>
        /// 生成自定义异常消息
        /// </summary>
        /// <param name="ex">异常对象</param>
        /// <param name="backStr">备用异常消息:当ex为null时有效</param>
        /// <returns>异常字符串文本</returns>
        private static string GetExceptionMsg(Exception ex, string backStr)
        {
            StringBuilder sb = new StringBuilder();
            sb.AppendLine("****************************异常文本****************************");
            sb.AppendLine("【出现时间】:" + DateTime.Now);
            if (ex != null)
            {
                sb.AppendLine("【异常类型】:" + ex.GetType().Name);
                sb.AppendLine("【异常信息】:" + ex.Message);
                sb.AppendLine("【堆栈调用】:" + ex.StackTrace);
                sb.AppendLine("【异常方法】:" + ex.TargetSite);
            }
            else
            {
                sb.AppendLine("【未处理异常】:" + backStr);
            }
            sb.AppendLine("***************************************************************");
            return sb.ToString();
        }
    }
}

效果

标签:C#,AppendLine,System,Application,sb,using,异常,winform
From: https://www.cnblogs.com/muphy/p/16965275.html

相关文章

  • 算法 KECP 被顶会 EMNLP 收录,极少训练数据就能实现机器阅读理解
    作者:王嘉宁、汪诚愚、邱明辉、石秋慧、王洪彬、黄俊、高明近日,阿里云机器学习平台PAI与华东师范大学高明教授团队合作在自然语言处理顶级会议EMNLP2022上发表基于Prompt-Tun......
  • C++的语法 学习笔记1
    C++的语法学习笔记1  C++各种数据类型的默认值数值类型int/double/float/long0char'\0'string"\0"bool0,也就是false  数......
  • 机器学习--Logistic回归分类算法及应用
    1.Lineage逻辑回归分类算法1.1概述Lineage逻辑回归是一种简单而又效果不错的分类算法什么是回归:比如说我们有两类数据,各有50十个点组成,当我门把这些点画出来,会有一条线区......
  • 万字干货|Synchronized关键字详解
    作者:小牛呼噜噜|https://xiaoniuhululu.com计算机内功、JAVA底层、面试、职业成长相关资料等更多精彩文章在公众号「小牛呼噜噜」前言大家好,我是呼噜噜,在之前的文章......
  • Error_ Requires Babel _^7.0.0-0_, but was loaded with _6.26.3_.异常解决
    使用webpack初始化工程,写了个简单的js函数,想将其打包成exe执行,在build的时候报错Error:RequiresBabel"^7.0.0-0",butwasloadedwith"6.26.3".Ifyouaresu......
  • 钉钉开发之根据流程码获取流程表单schema
    一、环境:1、钉钉oa审批流程中,已有“出差审批”流程,流程码为:PROC-48E207E5-EB8B-457C-BC3D-86CD5E5A50B32、开发环境:IDEA二、代码1、获取tokenpackagesfccl.api;imp......
  • Docker学习6-Docker镜像commit操作案例
    在上一篇中,我们知道了docker是基于联合文件系统的分层镜像。而且也知道了镜像是只读的,容器才是可以写的。那么,如果我们要修改镜像,修改之后,怎么提交呢?本文,凯哥将介绍,docker......
  • shell脚本列出docker所有tag
    docker-tags-list.sh#!/bin/bash#-----------------------------------------------------------------#FileName:docker-tags-list.sh#Date:2021-12-24#Author......
  • python中socke套接字的应用
    socket:问题一:什么是socketsocket(简称套接字)是进程间通信的一种方式,它与其他进程间通信的一个主要不同是:它能实现不同主机间的进程间通信,我们网络上各种各样的服......
  • yum -y install centos-release-gluster安装报错
    创建完yum仓库yum安装报错yum安装centos-release-gluster安装报错:版本过高,先解除依赖关系(极大可能)建完yum仓库再三检查没错,甚至有很多人yumcleanall&&yumcakecache......