我在一个页面上有几个控件。它恰好是一个 Silverlight 页面,但我认为这对这个问题并不重要。
当控件的值更改时,会引发更改事件。在这种情况下,我进行计算并更改其他控件之一的值。这反过来又导致另一个控件引发更改的事件,这反过来又导致计算(冗余)再次完成。
即任何控件的值的改变都会导致计算被执行并且另一个控件的值改变——总是在这个用例中。
我最初尝试解决这个问题涉及使用布尔标志并将其重置为第二个事件中的默认值。然而,这并没有奏效,而且感觉很做作。
您将如何阻止第二次计算完成?
我在一个页面上有几个控件。它恰好是一个 Silverlight 页面,但我认为这对这个问题并不重要。
当控件的值更改时,会引发更改事件。在这种情况下,我进行计算并更改其他控件之一的值。这反过来又导致另一个控件引发更改的事件,这反过来又导致计算(冗余)再次完成。
即任何控件的值的改变都会导致计算被执行并且另一个控件的值改变——总是在这个用例中。
我最初尝试解决这个问题涉及使用布尔标志并将其重置为第二个事件中的默认值。然而,这并没有奏效,而且感觉很做作。
您将如何阻止第二次计算完成?
布尔标志也是,我想......不知道为什么它不适合你。它会是这样的:
private bool InEvent = false;
public void MyEventHandler(object sender, EventArgs e)
{
if ( InEvent )
return;
InEvent = true;
// Do stuff here
InEvent = false;
}
如果您害怕多线程,您可能会在某处使用 lock 语句,但我认为情况并非如此。此外,您可能想尝试一下……最后确保 InEvent 始终设置为 false。