2016-06-11 3 views
0

У меня есть консольное приложение, которое записывает данные в базу данных через день. Я бы хотел выполнить эту работу только два раза. На данный момент я использую цикл while и проверяю текущее время на временной диапазон, на котором я хотел бы запустить задание. Это требует немного мощности процессора. Есть ли более простой способ сделать это?Подход к запуску/остановке работы в определенное время

While(true) 
{ 
    if(current > DateTime.Today.AddHours(6) && current < DateTime.Today.AddHours(20)) 
    { 
     ---DO STUFF 
    } 
} 

ответ

1

Да, рассмотрите возможность использования класса System.Timers.Timer, как показано ниже. Здесь интервал устанавливается равным 1000 миллисекундам (1 секунда). Поэтому через каждые 1 секунду он поднимет событие Elapsed, когда вы сможете выполнить требуемую задачу.

Timer tmr = new Timer(1000); 
tmr.Elapsed += elapsedHandler; 

private void elapsedHandler(Object source, ElapsedEventArgs e) 
{ 
    //do your work 
} 

За свой комментарий, в этом случае создать exe и создать командный сценарий DOS для запуска этого EXE. Затем используйте Windows task scheduler для запуска dos script в заданном диапазоне времени.

+0

Но если бы я хотел работу, чтобы работать каждый день с 06:00 до 20:00, то я бы имеют 2 таймера. Один - за время, в течение которого должно выполняться задание, и одно за время, которое должно пройти до того, как задание снова запустится. Это верно? –

+0

@MitchelStuartFountaine, см. Править в ответ, если это помогает. – Rahul

+0

Спасибо за отзыв Рахул. Я использовал диспетчер задач Windows для запуска/завершения консольного приложения. Это убьет процесс, но я изо всех сил пытался его запустить из-за зависимостей. К сожалению, планировщик заданий отсутствует. Я также сделаю это в службу в конечном итоге, поэтому мне бы хотелось, чтобы служба выполняла только работу между указанными моментами. –

1

Вы можете сохранить тот же подход, но и использовать сон 1мс или больше, а процессор будет меньше используется

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