【问题标题】:Single event raising pattern for multiple controls多个控件的单个事件引发模式
【发布时间】:2008-12-01 04:15:57
【问题描述】:

我在一个页面上有几个控件。它恰好是一个 Silverlight 页面,但我认为这对这个问题并不重要。

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

即更改任何控件的值都会导致执行计算并更改另一个控件的值 - 始终在此用例中。

我最初尝试解决这个问题涉及使用布尔标志并在第二个事件中将其重置为默认值。然而,这并没有奏效,而且感觉很做作。

您将如何阻止第二次计算完成?

【问题讨论】:

    标签: design-patterns events event-handling


    【解决方案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。

    【讨论】:

    • 这与我所说的类似,只是有 2 个事件,所以它是 MyEventHanderA() 和 MyEventHandlerB()。每个调用一个通用的计算函数。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-14
    相关资源
    最近更新 更多