1

ページにいくつかのコントロールがあります。たまたま Silverlight ページですが、この質問には関係ないと思います。

コントロールの値が変更されると、change イベントが発生します。このイベントでは、計算を行い、他のコントロールの 1 つの値を変更します。これにより、他のコントロールが変更されたイベントを発生させ、計算が (冗長に) 再度行われます。

つまり、任意のコントロールの値を変更すると、計算が実行され、別のコントロールの値が変更されます。この使用例では常にそうです。

これを解決するための私の最初の試みには、ブール値フラグを使用し、2 番目のイベントでデフォルト値にリセットすることが含まれていました。しかし、これはうまくいきませんでした。

2 番目の計算が行われないようにするにはどうすればよいでしょうか?

4

1 に答える 1

1

ブールフラグもそうだと思います...なぜそれがうまくいかなかったのかわかりません。次のようになります。

private bool InEvent = false;
public void MyEventHandler(object sender, EventArgs e)
{
    if ( InEvent )
        return;
    InEvent = true;
    // Do stuff here
    InEvent = false;
}

マルチスレッドが怖い場合は、どこかで lock ステートメントを使用することもできますが、そうではないと思います。また、最後に InEvent が常に false に設定されていることを確認するために、try...finally を実行することもできます。

于 2008-11-30T20:15:57.137 に答える