Как проверить свойство класса, чтобы запустить таймер обратного отсчета, когда оно получит значение - PullRequest
1 голос
/ 07 марта 2012

У меня есть приложение winform, которое читает и изменяет файлы, переименовывает их и т. Д.
Каждый раз, когда состояние меняется (изменить, переименовать, работает ... и т. Д.), Состояние отображается в соответствующей метке, иногда следующие файлы, которые необходимо обработать, приходят с задержкой в ​​несколько секунд, и когда это происходит, я хочу отсчет таймера, который отображает время пока не придет следующий файл.
В основном классе у меня есть свойство (тип double), которое получает время в секундах, когда придет следующий файл. Я хочу, чтобы таймер запускался с интервалом более пяти секунд.
И когда это произойдет, свойство получит количество секунд, и таймер должен прочитать это двойное значение и обратный отсчет.
Как я могу проверить эту переменную все время, и когда он получит соответствующее значение, таймер запустится?

Вот мой класс, как узнать время задержки:

public class Delay
{   
    public event EventHandler _largeWait;

    public Delay(int numberOfSeconds)
    {
        _numberOfSeconds = numberOfSeconds;
    }

    public double _delayTime;

    public double _packetDelay
    {
        get { return _packetDelay; }

        set
        {
            _packetDelay = value;

            if (value > 5 && _largeWait != null)
            {
                _largeWait(this, EventArgs.Empty);
            }
        }
    }
}

И затем в месте, где я создаю экземпляр Delay: (после вставки значения в переменную задержки)

_largeWait += (s, e) =>
    {
        if (_largeWait != null)
         {
             _largeWait(s, e);
         }
     };

проблема здесь в том, что это стало рекурсией, и я не знаю, почему

1 Ответ

1 голос
/ 07 марта 2012

Вы можете реализовать установщик вместо краткой формы и запустить таймер, если> 5 с:

public class Delay
{
    public event EventHandler LargeWait;

    private double numberOfSeconds;
    public double NumberOfSeconds
    {
        get { return numberOfSeconds; }
        set
        {
            numberOfSeconds = value;
            if(value > 5 && LargeWait != null)
                LargeWait(this, EventArgs.Empty);
        }
    }

    public Delay(int numberOfSeconds)
    {
        this.numberOfSeconds = numberOfSeconds;
    }
}

А затем в месте, где вы создаете экземпляр Delay:

Delay delay = new Delay(sec);
delay.LargeWait += (s, e) => {
    timer.Tag = s; //s is the Delay instance
    timer.Start();
};
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...