Задержка выполнения метода, если вызывается несколько раз в быстрой последовательности и игнорировать устаревшие запросы - PullRequest
0 голосов
/ 15 апреля 2019

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

Таким образом, проблема состоит в следующем: 1. Задержка выполнения метода на определенный интервал (в моем случае 1000 мс) и 2. Только выполнение.самый последний запрос в очереди и отменить остальные.

Вот моя реализация, которая работает, но мне интересно, есть ли более краткий / эффективный способ ее реализации.Кажется, много кода для того, что он делает.

private Timer _appReadyDelayTimer; 
private readonly Stack<Tuple<bool, string>> _appReadyRequestStack = new Stack<Tuple<bool, string>>();

public override void ShowAppReady(bool visible, string message)
{
lock (_appReadyRequestStack)
{
    _appReadyRequestStack.Push(new Tuple<bool, string>(visible, message));

    if (_appReadyDelayTimer == null)
    {
        _appReadyDelayTimer = new Timer(o =>
        {
            Tuple<bool, string> latestRequest;
            lock (_appReadyRequestStack)
            {
                if (_appReadyRequestStack.Count == 0) return;

                   latestRequest = _appReadyRequestStack.Pop();
                   _appReadyRequestStack.Clear();
            }

             Dispatcher.Invoke(new Action(() => SetApplicationReadyMessage(latestRequest.Item1, latestRequest.Item2)));
            });
    }

    _appReadyDelayTimer.Change(1000, Timeout.Infinite);
}
}

private void SetApplicationReadyMessage(bool visible, string message)
{ // Implementation Details }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...