Подтвердить что ты не робот

Максимальный интервал таймера

Максимальный интервал таймера равен 2,147,483,647. это около 25 дней. Но в моих требованиях мне нужно, чтобы таймер будет ждать 30 дней. Как я могу это решить? Пожалуйста, помогите.

4b9b3361

Ответ 1

Используйте для этого System.Threading.Timer. Существуют конструкторы, которые принимают long, a uint или TimeSpan вместо int для dueTime. Любой из них позволит вам установить период в 30 дней.

Обновить: это самый простой способ сделать это:

System.Threading.Timer _timer;
public void Start30DayTimer()
{
    TimeSpan span = new TimeSpan(30, 0, 0, 0);
    TimeSpan disablePeriodic = new TimeSpan(0, 0, 0, 0, -1);
    _timer = new System.Threading.Timer(timer_TimerCallback, null, 
        span, disablePeriodic);
}

public void timer_TimerCallback(object state)
{
    // do whatever needs to be done after 30 days
    _timer.Dispose();
}

Ответ 2

int days = 30;

Создайте таймер на один день.

Уменьшение days при каждом срабатывании таймера.

Ответ 3

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

Лучшая идея - установить значение где-то во внешнем файле, чтобы, если программа когда-либо неожиданно завершалась, вы можете возобновить работу, где вы остановились. В идеале вы, вероятно, захотите поставить следующую дату запуска в файл, чтобы в случае, если программа отключена в течение нескольких дней, вы можете возобновить ее и запустить ее в правильную дату, не беспокоясь о том, когда она была в последний раз. Так что что-то вроде

NextRunDate = 10/10/2009 16:40

Когда программа запускается, она устанавливает дату еще на 30 дней.

Ответ 4

Это таймер, говорящий, что ваше приложение более правильно реализовано как запланированное задание.

Ответ 5

Я настоятельно рекомендовал использовать функцию "Запланированная задача", особенно если это предназначено для запуска чего-либо в тот же день каждый месяц, как месяцев варьируются от 28 до 31 дня.

Ответ 6

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

Ответ 7

Для этого с таймером вам также потребуется приложение и ПК, который работает без перерыва в течение 30 дней. Не исключено, но большой риск.

Похоже, вам нужно запланировать выполнение чего-то. Вычислите целевую дату/время и сохраняйте, что это файл XML или .config. Когда приложение перезагрузится, он может повторно рассчитать TimeSpan для запуска события.

Ответ 8

Библиотека Quartz.NET - еще один вариант для запуска вашего кода по расписанию.

Ответ 9

Конструктор таймера возьмет TimeSpan, который является int64 тикает, что более 25 дней?

Вы также считали, что система не может оставаться на 30 дней?

Просто посмотрел, это 10 675 199 дней.