C# 捕获异常 兜底函数

纯自己记录

在运行有可能出问题的 语句前,将函数添加进事件

                     取当前作用域
                    //AppDomain currentDomain = AppDomain.CurrentDomain;
                     当前作用域出现未捕获异常时,使用MyHandler函数响应事件
                    //currentDomain.UnhandledException += new UnhandledExceptionEventHandler(CurrentDomain_UnhandledException);

                    // 当前作用域出现未捕获异常时,使用MyHandler函数响应事件
                    AppDomain.CurrentDomain.UnhandledException += CurrentDomain_UnhandledException;
                    try
                    {
                        Task taskRestart = Task.Factory.StartNew(() => eventRestart(m_logger,this));
                        //taskRestart.Start();在上一句eventRestart已经调用了  不需要start再调一遍
                        return;
                    }
                    catch (Exception ex)
                    {
                        m_logger.LogError("重新启动错误:"+ ex.ToString());
                    }

函数本体:

        // 函数处理后异常会继续,不需要重新抛出异常
        private void CurrentDomain_UnhandledException(object sender, UnhandledExceptionEventArgs e)
        {
            Exception ex = e.ExceptionObject as Exception;
            if (null == ex)
            {
                m_logger.LogError("兜底处理所有未处理的异常Unhandled Exception");
            }
            else
            {
                m_logger.LogError("测试m_logger有没有问题");
                m_logger.LogError("兜底处理所有未处理的异常Unhandled Exception", ex.ToString());
            }
        }

 

---------------------------还有一种,只是可以通过状态看到是否成功  但不知道原因的--------------------------

主要运行是Process.Start(psi),通过看process的状态

                Process process = Process.Start(psi);
                StreamReader myStreamReader = process.StandardError;

                Thread.Sleep(3000);//停3秒,等那边开始运行,再获取状态  不然还没运行就拿状态  没用
                bool isExited = process.HasExited;//遇到错误就会关闭/终止  存在就是没错

                if (isExited)
                {
                    // myStreamReader.Seek(0, SeekOrigin.Current)
                    Console.WriteLine("打印信息" + myStreamReader.ReadToEnd());

                }
                Console.WriteLine("process" + process.ToString());

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值