Member 10525430 Ответов: 1

Ошибка времени отрицательную погрешность Макс значения int


Привет

private void timingToolStripMenuItem_Click(object sender, EventArgs e)
        {
            StartTimer(new TimeSpan(10, 00 , 0), new TimeSpan(24,00 , 0), ProcessViewType.SingleRun, false);
            StartTimerH(new TimeSpan(09, 30, 0), new TimeSpan(01, 00, 0), ProcessViewType.ReportToBranch, false);


        }

        protected void StartTimer(TimeSpan scheduledRunTime, TimeSpan timeBetweenEachRun,ProcessViewType pc,bool Hourly)
        {
            // Initialize timer
            double current = DateTime.Now.TimeOfDay.TotalMilliseconds;
            double scheduledTime = scheduledRunTime.TotalMilliseconds;
            double intervalPeriod = timeBetweenEachRun.TotalMilliseconds;
            // calculates the first execution of the method, either its today at the scheduled time or tomorrow (if scheduled time has already occured today)
            double firstExecution = current > scheduledTime ? intervalPeriod + (intervalPeriod - current) : scheduledTime - current;
            System.Threading.TimerCallback callback = null;
  callback = new System.Threading.TimerCallback(runSingleRun);

            _timer = new System.Threading.Timer(callback, null, Convert.ToInt32(firstExecution), Convert.ToInt32(intervalPeriod));

        }


когда я запускаю этот код в 12: 00 вечера, я получаю ошибку, которая является "необработанным исключением типа' System.Об' произошел в mscorlib.dll

Дополнительная информация: число должно быть неотрицательным и меньше или равно Int32. MaxValue или -1."

Что я уже пробовал:

Когда я меняю время на 9: 00 утра, эта ошибка не отображается.

Graeme_Grant

Вы понимаете, что такое отладка? Вы проверили значение переменных в строке, вызывающей ошибку? Вы увидите, почему именно.

CHill60

Когда вы впервые опубликовали этот вопрос 4 дня назад, вам посоветовали использовать отладчик, чтобы определить, что происходит.
Мы не можем отладить это для вас - runSingleRun и ProcessViewType нам неизвестны

Member 10525430

я нашел ошибку на вопросе 4 дня назад.Это другая ошибка, это я не могу запустить промежуток времени прохождения, он ловит исключение.

Graeme_Grant

Как уже упоминалось выше, простая отладка 101, вы увидите свою проблему.

Базовая отладка с помощью Visual Studio 2010-YouTube[^]

Ralf Meier

пробовали ли вы добавить 1 день к значению, если оно отрицательное (потому что вы вычитаете более высокое значение из более низкого значения из дневного изменения) ?

Richard MacCutchan

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

1 Ответов

Рейтинг:
4

Jochen Arndt

Это будет отрицательно, когда время планирования уже прошло и intervalPeriod меньше, чем current / 2 (например, при вызове с помощью timeBetweenEachRun часовой):

// calculates the first execution of the method, either its today at the scheduled time or tomorrow (if scheduled time has already occured today)
double firstExecution = current > scheduledTime ? intervalPeriod + (intervalPeriod - current) : scheduledTime - current;

Используйте это вместо этого:
double firstExecution = scheduledTime - current;
// If scheduling time already passed today, do it tomorrow
if (firstExecution <= 0)
    firstExecution += 24 * 60 * 60 * 1000;


Member 10525430

Спасибо