2

( PropertyChangedEventManagerを介して) 弱いイベント ハンドラーによってリッスンされているPropertyChangedイベントを発生させようとしています。イベントを発生させると、何らかの理由でExecutionEngineExceptionが発生します。

私のイベント発生コードは次のようになります。

protected virtual void RaisePropertyChanged(string aPropertyName)
{
    var lHandler = this.PropertyChanged;

    if (lHandler != null)
    {
        // ExecutionEngineException is thrown here
        lHandler(this, new PropertyChangedEventArgs(aPropertyName));
    }

    return;
}

私の処理コードは次のようになります。

public bool ReceiveWeakEvent(Type aManagerType, object aSender, EventArgs e)
{
    bool lHandled = false;

    if (aManagerType == typeof(PropertyChangedEventManager))
    {
        OnPropertyChanged(aSender, e as PropertyChangedEventArgs);
    }

    return lHandled;
}

この例外を検索しても有用な結果が得られず、例外自体には有用な情報が含まれていません! 問題の原因は何ですか?

4

2 に答える 2

6

PropertyChanged イベントのブログ エントリを発生させるときに、ExecutionEngineExceptionの作成者にプロップします。彼は問題と解決策を完璧に説明していますが、何らかの理由で彼のページは Web 検索結果の上位に表示されません。同じ問題に遭遇したより多くの人々を助けるために、ここに質問と回答を投稿したかった.

したがって、 ReceiveWeakEvent から戻ると、WeakEventManagerはEnvironment.FailFast ( )を呼び出すことがわかります。false

何という陰湿なバグでしょう!ブログ エントリからの引用に同意します。

これは、これまでの人生で見た中で最もばかばかしいほど過敏なエラー処理かもしれません。

私の固定ハンドラーは次のようになります。

public bool ReceiveWeakEvent(Type aManagerType, object aSender, EventArgs e)
{
    bool lHandled = false;

    if (aManagerType == typeof(PropertyChangedEventManager))
    {
        OnPropertyChanged(aSender, e as PropertyChangedEventArgs);
        lHandled = true;
    }

    return lHandled;
}
于 2012-03-15T20:13:31.060 に答える