收集处理后台线程报错的方法

收集处理后台线程报错的方法

功能

后台线程异常报告给UI (用户界面) 线程的上层软件。

事件
后台任务线程
UI线程

类和他们的关系
在这里插入图片描述

用户界面 UI类 伪代码

public class UIForm : Form //假设Win Form界面
{
    public UIActivityA() //调用后台任务的方法 (功能)
    {
        ...
    	Task taskX=new Task(); //实例化后台任务
    	...
    	taskX.AggregateExceptionOccured += 
            TaskX_AggregateExceptionOccured; //订阅异常响应方法
    }

    //异常响应方法范例
    //AggregateExceptionOccuredEventArgs 是自定义的出错诊断信息参数类
    private void TaskX_AggregateExceptionOccured(object sender, 	                                     AggregateExceptionOccuredEventArgs e)
    {
        MessageBox.Show(e.Exception.Message + Environment.NewLine +                                       e.Exception.StackTrace + e.Exception.InnerException?.Message); //显示警告
        this.Invoke(new Action(() => { GuiStop_Click(this, null); })); //调用关闭窗体方法
    }
    ...
}

后台任务 伪代码

public class Task
{
    //定义异步异常事件。
	public event AggregateExceptionOccuredEventHandler AggregateExceptionOccured;
    ...
    // 后台任务引擎。
    private void DoWorkEngine()
    {
	    try
    	{
            while(true)
            {
	        	...                
            }
    	}
    	catch(Exception exception)
    	{
        	//有异常,如果异步异常事件已被订阅,则调用订阅者的委托。
            var e = new AggregateExceptionOccuredEventArgs(DateTime.Now, 
                "Task 类 DoWorkEngine 异常", exception));
        	AggregateExceptionOccured?.BeginInvoke(sender, e, null, null);
    	}
        
    }
    
}

定义事件用到的类 伪代码

// 异步任务(如基于Thread/Task的引擎)执行出现异常时的委托。
public delegate void AggregateExceptionOccuredEventHandler(object sender, AggregateExceptionOccuredEventArgs e);

//定义出错诊断信息参数类
// 异步任务(如基于Thread/Task的引擎)执行出现异常的事件参数。
public class AggregateExceptionOccuredEventArgs : EventArgs
{

    #region------------------------- 公共属性 -------------------------

    /// <summary>
    /// 出现异常的时间。
    /// </summary>
    public DateTime Time { get; set; }

    /// <summary>
    /// 出现异常的任务名称。
    /// </summary>
    public string TaskName { get; set; }

    /// <summary>
    /// 异常信息。
    /// </summary>
    public Exception Exception { get; set; }

    #endregion

    #region------------------------- 构造函数 -------------------------

    /// <summary>
    /// 构造函数。
    /// </summary>
    /// <param name="time"></param>
    /// <param name="taskName"></param>
    /// <param name="exception"></param>
    public AggregateExceptionOccuredEventArgs(DateTime time, string taskName, Exception exception)
    {
        this.Time = time;
        this.TaskName = taskName;
        this.Exception = exception;
    }
    #endregion

}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值