Design patterns 多控件的单事件引发模式

Design patterns 多控件的单事件引发模式,design-patterns,events,event-handling,Design Patterns,Events,Event Handling,我在一个页面上有几个控件。这恰好是一个Silverlight页面,但我认为这与这个问题无关 当控件的值更改时,将引发更改事件。在这种情况下,我进行计算并更改其他控件之一的值。这反过来会导致另一个控件引发已更改的事件,这反过来又会导致再次(冗余)进行计算 i、 e.任何控件值的更改都会导致执行计算和另一个控件值的更改-始终在本用例中 我解决这个问题的最初尝试涉及使用布尔标志,并在第二个事件中将其重置为默认值。然而,这并没有起到作用,而且让人觉得很不自在 您将如何阻止第二次计算的进行?我认为布尔标志

我在一个页面上有几个控件。这恰好是一个Silverlight页面,但我认为这与这个问题无关

当控件的值更改时,将引发更改事件。在这种情况下,我进行计算并更改其他控件之一的值。这反过来会导致另一个控件引发已更改的事件,这反过来又会导致再次(冗余)进行计算

i、 e.任何控件值的更改都会导致执行计算和另一个控件值的更改-始终在本用例中

我解决这个问题的最初尝试涉及使用布尔标志,并在第二个事件中将其重置为默认值。然而,这并没有起到作用,而且让人觉得很不自在


您将如何阻止第二次计算的进行?

我认为布尔标志也是。。。不知道为什么它对你不起作用。应该是这样的:

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

如果您害怕多线程,您可以在某个地方使用lock语句,尽管我认为情况并非如此。另外,您可能想尝试一下……最后确保最终InEvent始终设置为false。

我认为布尔标志也是。。。不知道为什么它对你不起作用。应该是这样的:

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

如果您害怕多线程,您可以在某个地方使用lock语句,尽管我认为情况并非如此。此外,您可能希望尝试…最后确保InEvent始终设置为false。

这与我所说的类似,只是有两个事件,分别是MyEventHanderA()和MyEventHandlerB()。每个调用一个公共计算函数。这与我所说的类似,只是有两个事件,分别是MyEventHanderA()和MyEventHandlerB()。每个调用一个通用的计算函数。