1

許容できる方法で例外を処理していないグローバル イベント マネージャー クラスにシングルトン パターンを使用しています。

実行中のイベントの 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 ブロックは例外をキャッチしていません。

4

1 に答える 1

1

あなたが説明したTargetInvocationExceptionようなものには、ほとんどの場合、元の例外が含まれていInnerExceptionます。

于 2012-04-23T15:54:21.320 に答える