2014-09-22 3 views
-3

Я устанавливаю количество часов, чтобы загрузить что-то и сравнить его с текущим временем для выполнения моей задачи. Например, если я установил свою задачу в течение 48 часов, я сравниваю ее с текущим временем и получаю ожидаемые результаты. В этой ситуации после завершения 48 часов я вызываю другой метод.Вызов метода каждый час

Вот мой код:

if (_ScheduledTweetCount > 0 || DateTime.Now <= _ScheduledTweetHourTxtBox) 
    { 
     if (_ScheduledTweetCount > 0) 
     { 
      _ScheduledTweetCount--; 
     } 
     else 
     { 
      _ScheduledTweetHourTxtBox.CompareTo(scheduledTweetHourTxtBox);  
     } 
     sw.Close(); 
     sw.Dispose(); 
    } 
    CallingAnotherMethod(); 

enter image description here

То, что я хочу достичь, вместо того, чтобы ждать 48 часов, чтобы вызвать метод CallingAnotherMethod();, я хочу, чтобы назвать это на каждый час до тех пор, он достигает моего запланированного времени. Я видел какой-то связанный со статьей таймер, но я не уверен в этом сценарии, как я могу его использовать.

+1

Вы используете консольное приложение или его формы приложения? я точно не знаю, что вы хотите. –

+0

Какие проблемы у вас есть. Вы можете уточнить .. – MethodMan

+0

Извините, но здесь недостаточно кода/информации, чтобы помочь вам. – LVBen

ответ

2

Есть два способа сделать это. Один - с использованием таймера, который запускается каждые 60 минут с момента его первого вызова. Во-вторых, создавая таймер, который работает в фоновом режиме и вызывается каждые 10 секунд или около того, чтобы проверить, прошел ли час (например, если время изменилось с 2,55 до 3,10).

60-минутный таймер

myTimer = new System.Timers.Timer(60 * 60 * 1000); //one hour in milliseconds 
    myTimer.Elapsed += new ElapsedEventHandler(everyHour); 
    private static void everyHour(object src, ElapsedEventArgs e) 
    { 
     Put the code you want repeated in here 
    } 

Проверить, если время изменилось почасовой значение

myTimer = new System.Timers.Timer(1000); //One second, (less of an interval means that it will be more accurate, but more of an interval will mean that it uses less resources. 

    int previousHour = DateTime.Now.Hour; 
    myTimer.Elapsed += new ElapsedEventHandler(everyHour); 

    private static void everyHour(object src, ElapsedEventArgs e) 
    { 
     if(previousHour < DateTime.Now.Hour || (previousHour == 23 && DateTime.Now.Hour == 0)) 
     { 
       previousHour = DateTime.Now.Hour; 
       YourMethod(); // Call The method with your important staff.. 
     } 
    } 
-1

Установите интервал таймера 30000 (30-е) и поставить этот код ваш таймер:

private void timer1_Tick(object sender, EventArgs e) 
{ 
     if (DateTime.Now.Minute == 0) 
     { 
      // Do something 
     } 

} 
0

я опубликовал ответ на подобный вопрос hree, просто переписав код здесь, так как некоторые люди могут не нравится читать ответ, который не имеет строки кода:

using System; 
using System.Threading.Tasks; 

namespace COREserver{ 
    public static partial class COREtasks{ // partial to be able to split the same class in multiple files 
     public static async void RunHourlyTasks(params Action[] tasks) 
     { 
      DateTime runHour = DateTime.Now.AddHours(1.0); 
      TimeSpan ts = new TimeSpan(runHour.Hour, 0, 0); // ensure minutes and seconds to be ZERO 
      runHour = runHour.Date + ts; 


      while (true) 
      { 
       TimeSpan duration = runHour.Subtract(DateTime.Now); 
       if(duration.TotalMilliseconds <= 0.0) 
       { 
        Parallel.Invoke(tasks); 
        runHour = DateTime.Now.AddHours(1.0); 
        continue; 
       } 
       int delay = (int)(duration.TotalMilliseconds/2); 
       await Task.Delay(30000); // 30 seconds 
      } 
     } 
    } 
} 
Смежные вопросы