2016-09-07 4 views
0

Когда я запускаю свое приложение, мне нужно проверить, работает ли одна из моих служб. Если служба не запущена, я должен разрешить пользователю запускать службу, а затем выполнение продолжается. Если Пользователь не хочет запускать службу, я должен выйти из приложения. За каждые 10 секунд мне нужно вывести сообщение для запуска службы, в течение этого времени выполнение программы не должно продолжаться. Ниже приведен код, который я написал. Служба, которую я ищу для запуска, имеет обработчик событий, который уведомляет, когда услуга доступна (обработчик событий - это WindowsServiceAvailableEventHandler).Как возобновить или прервать спящий поток

У меня есть два вопроса

  1. Как возобновить или прервать поток, который спит (Thread.Sleep (10000)), как только поднимается ServiceAvailable событие?
  2. Когда пользователь хочет запустить службу, он нажмет кнопку «Да», а «Dailog Box Closes» и пользователь не узнает, происходит ли что-то. Так что я ищу что-то вроде индикатора выполнения, который скажет пользователю, что он ждет пользователь запустит службу ... как только начнется сервис, индикатор выполнения должен закрыть. Как это сделать?

Мой код:

this.windowsService.ServiceAvailable += this.WindowsServiceAvailableEventHandler 

While (!CheckifServiceStarted()) 
{ 
    DialogResult dlgResult = MessageBox.Show("Service is not Started.Please start Service to continue", "Start Service", MessageBoxButtons.YesNo); 

    if (dlgResult == DialogResult.Yes) 
    { 
     Thread.Sleep(10000); 
    } 
    else 
    { 
     System.Environment.Exit(0); 
    } 
} 

private void DataServicesAvailableEventHandler(object sender, EventArgs e) 
{ 
    //How to Resume or Interrupt the Thread here? 
} 

ответ

1

Вы можете заменить ваш Thread.Sleep с ManualResetEvent.WaitOne сигнализировать изменение обработчика следующим образом:

private ManualResetEvent serviceAvailableEvent = new ManualResetEvent(false); 

this.windowsService.ServiceAvailable += this.WindowsServiceAvailableEventHandler 

While (!CheckifServiceStarted()) 
{ 
    DialogResult dlgResult = MessageBox.Show("Service is not Started.Please start Service to continue", "Start Service", MessageBoxButtons.YesNo); 
    if (dlgResult == DialogResult.Yes) 
     serviceAvailableEvent.WaitOne(10000); 
    else 
     System.Environment.Exit(0); 
} 

private void DataServicesAvailableEventHandler(object sender, EventArgs e) 
{ 
    serviceAvailableEvent.Set(); 
} 

Что касается индикатора выполнения, проверьте this question за пример.

+0

Спасибо за ответ ... Это помогло мне .... – reddy

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