Member 10525430 Ответов: 1

Не работает хронометраж действия


Привет,

у меня есть проблема с моим кодом.
Однако когда я запускаю этот код метод почасовой отчетности работает нормально
"
StartTimer(new TimeSpan(08, 39, 0), new TimeSpan(24, 0, 0), ProcessViewType.SingleRun);
StartTimer(new TimeSpan(08,40 ,0), new TimeSpan(24, 0, 0), ProcessViewType.ReportToBranch);
"

эта часть-не работа.
Я пытаюсь отлаживать режим, когда часовой таймер работает sineglerun, а другой таймер не работает.Как бы я ни удалял ежечасное событие, остальные работают нормально.Я думаю, что ежечасное событие подавляет другие события. Как я могу это исправить?

почему? и как я могу решить эту проблему?

timingToolStripMenuItem.Enabled = false;
            StartTimer(new TimeSpan(15, 47, 0), new TimeSpan(24, 0, 0), ProcessViewType.ReportToBranch, true);
            StartTimer(new TimeSpan(12, 44, 0), new TimeSpan(24, 0, 0), ProcessViewType.SingleRun,false);
            StartTimer(new TimeSpan(12, 46, 0), new TimeSpan(24, 0, 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;
            // create callback - this is the method that is called on every interval
            if (pc == ProcessViewType.ReportToBranch && Hourly == false)
            {
                callback = new System.Threading.TimerCallback(runReport);
            }
            else if (pc == ProcessViewType.SingleRun && Hourly == false)
            {
                callback = new System.Threading.TimerCallback(runSingleRun);
            }
            else if (pc == ProcessViewType.ReportToBranch && Hourly == true)
            {
                callback = new System.Threading.TimerCallback(runReport);
                firstExecution = 1;
                intervalPeriod=TimeSpan.FromMinutes(3).TotalMilliseconds;
            }

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


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

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

Richard MacCutchan

Значения миллисекунд являются целыми числами, так зачем же вы их преобразуете? Не использовать double типы, за исключением сложной математики / статистики.

1 Ответов

Рейтинг:
2

Graeme_Grant

Когда вы застреваете вот так есть два варианта:
О. используйте функции отладки Visual Studio: установите точки останова и наблюдайте, ведет ли ваш код себя так, как требуется.

B. разбейте проблему на прототип решения следующим образом:
1. Запустите новый проект, поместите кнопку на форму и установите таймер на странице кода.
2. Запустите, чтобы убедиться, что он работает.
3. Расширить функционал один шаг.
4. Повторите шаги со 2. &ампер; 3. пока весь функционал не работает.
5. исправьте код в приложении.

Я использовал шаг B. выше пару часов назад, чтобы решить сложную проблему формата кодирования xml, которая у меня была...