C# 单例事件的异常处理

C# 单例事件的异常处理,c#,exception,singleton,C#,Exception,Singleton,我正在为一个全局事件管理器类使用单例模式,该类没有以可接受的方式处理异常 如果在由正在执行的事件之一调用的代码中抛出异常,我总是会得到一个调用目标抛出的异常。错误。此错误不包含与原始异常相关的信息,因此调试任何错误都非常困难 是否有办法将原始异常信息传递回事件管理器 public class ApplicationSettings { private static EventManager _manager = new EventManager(); public static

我正在为一个全局事件管理器类使用单例模式,该类没有以可接受的方式处理异常

如果在由正在执行的事件之一调用的代码中抛出异常,我总是会得到一个调用目标抛出的
异常。
错误。此错误不包含与原始异常相关的信息,因此调试任何错误都非常困难

是否有办法将原始异常信息传递回事件管理器

public class ApplicationSettings
{
    private static EventManager _manager = new EventManager();

    public static EventManager EventManager
    {
        get { return _manager; }
    }
}
事件管理器类:

public class EventManager
{
    public event EventHandler<ReportExecutionArgs> ExecuteReportCurrentPage;
    public event EventHandler<ReportExecutionArgs> ExecuteReportNewPage;

    public virtual void OnExecuteReportCurrentPage(object sender, ReportExecutionArgs e)
    {
        try
        {
            if (this.ExecuteReportCurrentPage != null)
                this.ExecuteReportCurrentPage(sender, e);
        }
        catch (Exception ex)
        {
            MessageBox.Show(ex.ToString());
        }
    }

    public virtual void OnExecuteReportNewPage(object sender, ReportExecutionArgs e)
    {
        try
        {
            if (this.ExecuteReportNewPage != null)
                this.ExecuteReportNewPage(sender, e);
        }
        catch(Exception ex)
        {
            MessageBox.Show(ex.ToString());
        }
    }
}
公共类事件管理器
{
公共事件事件处理程序ExecuterReportCurrentPage;
公共事件事件处理程序ExecutePortNewPage;
公共虚拟void OnExecuteReportCurrentPage(对象发送方,ReportExecutionArgs e)
{
尝试
{
if(this.ExecuteReportCurrentPage!=null)
此.ExecuteReportCurrentPage(发送方,e);
}
捕获(例外情况除外)
{
Show(例如ToString());
}
}
公共虚拟void OnExecuteReportNewPage(对象发送方,ReportExecutionArgs e)
{
尝试
{
if(this.ExecuteReportNewPage!=null)
此.ExecuteReportNewPage(发送方,e);
}
捕获(例外情况除外)
{
Show(例如ToString());
}
}
}
其他一些类将处理这些事件

ApplicationSettings.EventManager.ExecuteReportNewPage += new EventHandler<ReportExecutionArgs>(reportOpenedNewPage);

private void reportOpenedNewPage(object sender, ReportExecutionArgs e)
    {
        //something in this code throws an error
        LitePage page = new LitePage();
        _tabs.AddPage(page);
        Report report = setReport(page, e);
    }
ApplicationSettings.EventManager.ExecuteReportNewPage+=新事件处理程序(reportOpenedNewPage);
私有void reportOpenedNewPage(对象发送方,ReportExecutionArgs e)
{
//此代码中的某些内容引发错误
LitePage页面=新建LitePage();
_tabs.AddPage(第页);
报告=设置报告(第e页);
}
编辑


只是想澄清一下,,
OnExecuteReport
方法中的try/catch块未捕获异常。

A
targetingException
如您所描述的,几乎总是在其
InnerException

A
targetingException
中包含原始异常,如您所描述的始终在它的
InnerException

中包含原始异常好吧,我也是这么想的,但是我能够发现我得到了一个Linq to XML错误,但是它没有在
InnerException
中引用好吧,您是正确的,但前提是您没有一个空的catch块围绕着这个有问题的语句!:pWell,我也是这么想的,但是我能够发现我得到了一个Linq到XML错误,但是它没有在
InnerException
中引用好的,您是正确的,但前提是您没有一个空的catch块围绕着有问题的语句!:P