Как использовать один и тот же таймер для разных временных интервалов? - PullRequest
4 голосов
/ 17 декабря 2010

Я использую таймер в своем коде.Строка состояния обновляется в событии тика при нажатии соответствующей кнопки для интервала времени, указанного в свойствах, например, одна секунда.Теперь я хочу использовать один и тот же таймер для другого интервала времени, скажем, две секунды для другой операции.Как этого добиться?

Ответы [ 4 ]

6 голосов
/ 17 декабря 2010

Создать второй таймер.От взлома первого таймера выиграть нечего.

Как заметил @Henk, таймеры не такие дорогие.(Особенно по сравнению с исправлением трудно поддерживаемого кода!)

2 голосов
/ 17 декабря 2010

Я согласен с @Henk и другими.

Но все же что-то вроде этого может сработать:

Пример

    Int32 counter = 0;

    private void timer1_Tick(object sender, EventArgs e)
    {
        if (counter % 1 == 0)
        {
            OnOneSecond();
        }

        if (counter % 2 == 0)
        {
            OnTwoSecond();
        })

        counter++;
    }

Обновленный пример

private void Form_Load()
{
    timer1.Interval = 1000; // 1 second
    timer1.Start(); // This will raise Tick event after 1 second
    OnTick(); // So, call Tick event explicitly when we start timer
}

Int32 counter = 0;

private void timer1_Tick(object sender, EventArgs e)
{
    OnTick();
}

private void OnTick()
{
    if (counter % 1 == 0)
    {
        OnOneSecond();
    }

    if (counter % 2 == 0)
    {
        OnTwoSecond();
    }

    counter++;
}
0 голосов
/ 14 февраля 2013

Изменение свойства Interval за истекшее время.например, эта программа обрабатывает данные 30 секунд и спит 10 секунд.

static class Program
{
    private System.Timers.Timer _sleepTimer;
    private bool _isSleeping = false;
    private int _processTime;
    private int _noProcessTime;

    static void Main()
    {
        _processTime = 30000; //30 seconds
        _noProcessTime = 10000; //10 seconds

        this._sleepTimer = new System.Timers.Timer();

        this._sleepTimer.Interval = _processTime;
        this._sleepTimer.Elapsed += new System.Timers.ElapsedEventHandler(sleepTimer_Elapsed);

        ProcessTimer();

        this._sleepTimer.Start();
    }

    private void sleepTimer_Elapsed(object sender, System.Timers.ElapsedEventArgs e)
    {
        ProcessTimer();
    }

    private void ProcessTimer()
    {
        _sleepTimer.Enabled = false;

        _isSleeping = !_isSleeping;

        if (_isSleeping)
        {
            _sleepTimer.Interval = _processTime;

            //process data HERE on new thread;
        }
        else
        {
            _sleepTimer.Interval = _noProcessTime;
            //wait fired thread and sleep
            Task.WaitAll(this.Tasks.ToArray());
        }
        _sleepTimer.Enabled = true;
    }
}
0 голосов
/ 17 декабря 2010

Изменить свойство интервала таймера.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...