2013-05-16 4 views
0

У меня есть функция, которую нужно запускать каждые 15 минут, используя таймер в VB.net.Динамическое назначение интервала таймера

Но вызов, присутствующий здесь, заключается в том, что если я запустил таймер, скажем, в 2:00 утра, фактическая функция будет выполнена в 2:15 утра, после чего одна и та же функция будет выполняться каждые 15 минут.

У меня есть вспомогательный таймер, в котором запускается таймер, и оператор Addhandler вызывает функцию ONhandler на каждые 15 минут.

private mytimer as timer 
private sub Timer() 
{ 
with mytimer 
.autoreset=true 
.enabled=true 
.interval=900000 
.start 
end with 
AddHandler mytimer.elapsed ,assressof onhandler 
console.readkey() 
} 

onhandler(byval source as oblject,byval e as elapsedeventargs) 
{ 
Performs the DB operations. 
} 

Изначально у меня была пара логики, которая начала таймер точно каждые 00,15,30,45th минут каждого и каждый час. Предполагая, что я запустил приложение в 1:55 утра, логика обеспечит, чтобы приложения спали, пока он не достигнет 2:00 утра, а в 2:00 утра начнется таймер. Через 15 минут, т.е. через 2:15, функция будет выполнена.

Но мне нужно, я не хочу, чтобы мое приложение ожидало 15 минут с 2:00 до 2:15. Вместо этого он должен обработать в 2:00, а затем запустить таймер. Чтобы преодолеть это, я включил новую функцию «onhandler» с тем же именем метода AddHandler, который выполняет тот же процесс.

private sub Timer() 
{ 
onhandler()  ****New function namesd as AddHandler method 
with mytimer 
.autoreset=true 
.enabled=true 
.interval=900000 
.start 
end with 
AddHandler mytimer.elapsed ,assressof onhandler 
console.readkey() 
} 

onHandler() 
{ 
Do same DB function 
} 

После внедрения новой логики, если я запустить приложение в 1:55 утра, мое приложение будет спать до 2:00 утра, после чего Onhandler() метод внутри подразделам будут выполнены первым, и было бы Завершите 2: 01Am. Теперь таймер запускается в течение 15 минут, а следующий набор процессов выполняется в 2:16 AM, когда таймер установлен на 15-минутный интервал. Но мне нужно, чтобы мой процесс выполнялся ровно в 2:15. Другими словами, интервал таймера должен составлять 14 минут, а не 15 минут.

Другим примером является то, что я запускаю приложение в 3 утра, а если оно заканчивается на 3: 03Am, то для следующего прогона время должно составлять 12 минут, а не 15 минут.

Есть ли способ сделать интервал таймера динамическим для каждого процесса, когда процесс будет завершен в зависимости от времени окончания процесса ???

PS: Я новичок в DotNet и в течение последних нескольких дней трескаю голову по этой проблеме. Ребята, любезно помогите мне здесь.

Заранее благодарен, Madhu.

+2

Какой странный VB.net вы используете со всеми этими фигурными скобками и без End Sub, ...? – IvanH

ответ

1

Правильный способ сделать это - запустить Windows Task в определенное время. Но если вы действительно хотите, чтобы написать это в вашем приложении, вы можете разбудить программу каждую минуту, чтобы проверить время и просто добавьте к этому называемому методу:

Dim d = DateTime.Now 
    if(Not (d.Minute = 0 OrElse d.Minute = 15 OrElse d.Minute = 30 OrElse d.Minute = 45)) Then 
     Return 'Quits if the current time is not right 
    End If 
+0

сценарий: у меня есть фрагмент кода, который нужно запускать на каждую 15-ю минуту точно. Если фрагмент занимает 14 минут, то следующий триггер должен произойти через 1 мин. Если фрагмент займет 12 минут, то следующий триггер должен произойти через 3 минуты и т. Д. , , , Как я могу достичь этого в DotNet? –

+0

Мне пришлось вводить код целиком из того места, где я не могу сделать копию. поэтому проблема в его форматировании. Если вам требуется более подробная информация о решении моей проблемы, сообщите мне. Чтобы я мог предоставить вам необходимые данные. Заранее спасибо. –

+0

@MadhuSharan смените свой таймер на каждые 60 секунд и добавьте код, который я написал в начале вызываемой функции. Он должен работать – nmat

0

У меня было нечто подобное один раз. У меня будет переменная, называемая NextExecutionTime, которая будет содержать следующий процесс, который должен быть выполнен.

Сначала было бы (пример) 2 утра.

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

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