Не работает хронометраж действия
Привет,
у меня есть проблема с моим кодом.
Однако когда я запускаю этот код метод почасовой отчетности работает нормально
"
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
типы, за исключением сложной математики / статистики.