1
허용 가능한 방식으로 예외를 처리하지 않는 전역 이벤트 관리자 클래스에 대한 싱글 톤 패턴을 사용하고 있습니다.싱글 톤 이벤트에 대한 예외 처리
실행중인 이벤트 중 하나가 호출하는 코드에서 예외가 발생하면 항상 Exception has been thrown by the target of an invocation.
오류가 발생합니다. 이 오류에는 원래 예외와 관련된 정보가 없어 오류를 디버그하는 것이 매우 어렵습니다.
원래 예외 정보를 다시 이벤트 관리자로 전달할 수있는 방법이 있습니까?
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());
}
}
}
몇 가지 다른 클래스는 이러한 이벤트
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);
}
편집
그냥 명확하게, try/catch 블록을에서 처리합니다 OnExecuteReport
메쏘드가 예외.
글쎄, 그게 너무 생각하지만, 나는 XML 오류 Linq을 받고 있었는지 알 수 있었지만 InnerException에서 참조되지 않습니다 – ChandlerPelhams
좋아, 당신은 정확하지만, 당신이 돈을 경우에만 기분을 상하게하는 진술을 둘러싼 빈 catch 블록이 없습니다! : p – ChandlerPelhams
빈 캐치 블록? 멸하다! –