許容できる方法で例外を処理していないグローバル イベント マネージャー クラスにシングルトン パターンを使用しています。
実行中のイベントの 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);
}
編集
明確にするために、OnExecuteReport
メソッドの try/catch ブロックは例外をキャッチしていません。