Мое предложение состоит в том, чтобы не делать никакой пользовательской логики, чтобы выяснить, является ли она последней или что-то в этом роде.Наилучшим подходом будет сохранение после каждого события, но вы можете отменить его.
Используя подход с отладкой, вы можете отменить старое событие, если новое событие будет запущено сразу после того, как вы захотите разрешить некоторое время.между вызовами.
Пример: запись в хранилище, только если нет нового события после, скажем, 1 секунды или 5 секунд, в зависимости от того, что приемлемо для вашего приложения
Скажем, мы решили сохранить сотмена 1 секунды
Первое событие происходит, когда вы запускаете действие, которое имеет 1 секунду для выполнения
Если другое событие вызвано, старое действие игнорируется, а новое действие теперь имеет 1 секунду для выполнения ии так далее для других последовательных действий
public static Action Debounce(this Action func, int milliseconds = 300)
{
var last = 0;
return arg =>
{
var current = Interlocked.Increment(ref last);
Task.Delay(milliseconds).ContinueWith(task =>
{
if (current == last) func(arg);
task.Dispose();
});
};
}
Предполагая следующее действие для сохранения ваших данных ниже. Действие a = (arg) => {сохранить мои данные здесь};
сначала назначьте debouncer дляваше действие
var debouncedWrapper = a.Debounce(1000); //1 sec debounce
Тогда вы можете использовать его следующим образом
public void datagridchangeevent(object sender, Event e)
{
debouncedWrapper()
}
Это будет игнорировать последовательные вызовы, и действие будетвыполняется только в том случае, если в течение одной секунды ничего не вызывается