2016-11-29 5 views
0

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

Таймер:

timeForFitbitUpdate = 86400000; // Setting 24 hours of intervals 
Timer aTimer = new Timer(10); 
aTimer.Elapsed += new ElapsedEventHandler(RunEvent); 
aTimer.Interval = timeForFitbitUpdate; 
aTimer.Enabled = true; 

Я попробовал этот код:

int delayTime = CalculateDelay(); 
var connectionString = ConfigurationManager.ConnectionStrings["VRT"].ConnectionString; 
FitbitDataSave dataSave = new FitbitDataSave(connectionString); 
await Task.Delay(delayTime); 
dataSave.DoTimedWork(); 

но с другими закодированных миллисекунды как в таймере и задержка .. Задержка была установлена ​​на 5 минут и таймер до 5 минут, и это заняло первый раз 10 минут, а после этого 11 минут и т. д.

Если у кого-то есть идеи, то pls share thnx :)

+1

Вы можете использовать задачу, чтобы задержать начало таймера, например: 'Task.Factory.StartNew (() => {Секундомер sw = новый секундомер(); sw.Start(); while (sw.ElapsedMilliseconds! = DelayTime) {} aTimer.Enabled = true;}); ' –

+2

@ m.rogalski, пожалуйста, не рекомендуйте интенсивный опрос CPU (или вообще опросить), у нас есть' Task.Delay() '/'Thread.Sleep() 'для этого (см. [this] (http://stackoverflow.com/a/5743843/1997232) ответ). – Sinatr

+0

@ Sinatr Он до него, какой метод он будет использовать, чтобы ждать задержки. Я просто даю простой и читаемый пример –

ответ

0

Я бы, вероятно, установил свой интервал для CalculateDelay(); на старте.

Затем, как часть вашего ElapsedEventHandler, измените свой интервал на 24 часа.

Смежные вопросы