Шаблон вызова одного события для нескольких элементов управления

У меня есть несколько элементов управления на странице. Это страница Silverlight, но я не думаю, что это имеет значение для этого вопроса.

Когда значение элемента управления изменяется, возникает событие изменения. В этом случае я делаю расчет и меняю значение одного из других элементов управления. Это, в свою очередь, приводит к тому, что другой элемент управления создает измененное событие, которое, в свою очередь, приводит к повторному (избыточному) выполнению вычислений.

т. е. изменение значения любого элемента управления приведет к выполнению вычисления и изменению значения другого элемента управления - всегда в этом случае использования.

Моя первоначальная попытка решить эту проблему включала использование логического флага и сброс его до значения по умолчанию во втором событии. Однако это не сработало, и я чувствовал себя обманутым.

Как бы вы предотвратили выполнение второго расчета?


person Guy    schedule 30.11.2008    source источник


Ответы (1)


Логический флаг тоже, я думаю... Не знаю, почему у вас это не сработало. Это будет что-то вроде этого:

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

Вы можете где-нибудь использовать оператор блокировки, если боитесь многопоточности, хотя я не думаю, что это так. Кроме того, вы можете попробовать... наконец, чтобы убедиться, что InEvent всегда имеет значение false в конце.

person Vilx-    schedule 30.11.2008
comment
Это похоже на то, о чем я говорю, за исключением того, что есть 2 события, поэтому это будут MyEventHanderA() и MyEventHandlerB(). Каждый вызов общей функции вычисления. - person Guy; 30.11.2008