Как я могу подождать некоторое время в С# (служба Windows)

Я создал службу Windows на С#. На данный момент у меня есть методы сканирования БД. Мне нужно вызывать этот метод два раза в минуту. На самом деле я не знаю способа ожидания в службе Windows. Я попробовал Thread.Sleep... но ничего не произошло. Пожалуйста, помогите мне с этой проблемой.

private int wait;
protected void Start()
{
    wait = 1000;
    while (true)
    {
        if (wait < 30000)
            wait += wait;

        //implement logic for waiting

        Video video = new Video();
        video.FindFileForConvert();
        if (video.Path != null)
        {
            Console.WriteLine("video != null. video path = {0}", video.Path);
            video.BeginConvertation();
            video.DeleteOriginFile();
            wait = 1000;
        }
    }
}

person Viktor Ischenko    schedule 12.03.2013    source источник
comment
Используйте таймер и выполняйте свою работу по событиям таймера.   -  person Hamlet Hakobyan    schedule 12.03.2013
comment
какой интервал используется в Thread.Sleep()?   -  person Cris    schedule 12.03.2013


Ответы (3)


Вы можете использовать таймер

public static int Main() {
   /* Adds the event and the event handler for the method that will 
      process the timer event to the timer. */
   myTimer.Tick += new EventHandler(TimerEventProcessor);

   // Sets the timer interval to 5 seconds.
   myTimer.Interval = 5000;
   myTimer.Start();

   // Runs the timer, and raises the event. 
   while(exitFlag == false) {
      // Processes all the events in the queue.
      Application.DoEvents();
   }
return 0;
}
person dotmido    schedule 12.03.2013

Вы должны использовать System.Threading.Timer для . Поскольку Thread.sleep не является хорошей практикой, по крайней мере, в некоторых случаях.

person Community    schedule 12.03.2013
comment
Не могли бы вы уточнить разницу между System.Threading.Timer и System.Threading.Thread.Sleep ? Мне любопытно понять, почему одна практика лучше, чем другая. - person Nolonar; 12.03.2013
comment
@Nolonar SO и этот ссылка msdn - person ; 12.03.2013

Я могу ошибаться, но я думаю, что этот код поможет вам решить вашу проблему. DispatcherTimer

DispatcherTimer dispathcerTimer = new DispatcherTimer();
dispathcerTimer.Interval = TimeSpan.FromMinutes(2);
dispathcerTimer.Tick += dispathcerTimer_Tick;
dispathcerTimer.Start();

void dispatcherTime_Tick(object sender, object e)
{
  //function, which needs to be invoked every two minutes.     
}
person Viacheslav    schedule 12.03.2013
comment
Я думаю, что DispatcherTimer больше подходит для задач, связанных с пользовательским интерфейсом. - person D.Rosado; 12.03.2013