Событие запуска только после того, как пользователь сделал паузу на определенный промежуток времени?

#c# #wpf #events

#c# #wpf #Мероприятия

Вопрос:

Я использую C #, .NET 3.1. В моем приложении у меня есть элемент управления IntegerUpDown, свойство value которого привязано к свойству в коде UCs. Если это свойство достигает 0, я хочу вызвать событие. Моя текущая реализация выглядит так:

 private int prop;

public int Prop
{
    get
    {
        return prop;
    }

    set
    {
        prop = value;

        if (prop == 0)
        {
            // invoke event
        }
    }
}
  

Проблема, с которой я сталкиваюсь, заключается в том, что каждый раз, когда пользователь нажимает на стрелки элемента управления IntegerUpDown, мой код проверяет, равно ли значение 0. Мой вопрос в том, есть ли способ вызвать событие «разумно». Под этим я подразумеваю, что событие будет, например, вызываться только в том случае, если пользователь не нажимал стрелку в течение последних 2 секунд, чтобы указать, что он закончил настройку значения.

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

Комментарии:

1. Определите свою привязку как {Binding Prop, Delay=2000} .

2. Терминология, которую вы ищете, называется Debouncing

3. Я не знаю wpf, поэтому, возможно, добавление задержки полезно (хотя 2 секунды могут быть долгим ожиданием ответа пользовательского интерфейса). Является ли код, который проверяет 0 , действительно ли значение вызывает проблему? Это относительно быстрая операция, которая обычно не вызывает проблем.

4. Возможно, что выполнение присваивания и сравнение результата в if условии может быть немного быстрее (т. Е.: if ((prop = value) == 0) ), Но я не на компьютере, где я могу сравнить сгенерированный IL прямо сейчас.

5. Вы действительно видите какую-то проблему? Если нет, то я бы предположил, что вы преждевременно оптимизируете против чего-то, чего там нет. Я не уверен, что это опровержение, которое вы описываете. Если пользователь уменьшает значение до 1. Останавливается на 1 или 2 секунды. Затем они нажали на ошибку down. Вы действительно не хотите запускать событие?