2013-08-14 8 views
-1

Я новичок в C#. У меня есть служба Windows. В этой службе я запускаю поток. Я хочу остановить службу сразу после завершения потока. В настоящее время мой код, как:Остановить программу при завершении потока

while(true){ 
    if(isThreadFinished){ 
      MyService.Stop(); 
      break; 
    } 
} 

Это работает, но я чувствую, что, используя время (правда), как это глупый способ. Итак, я хочу знать, есть ли другой способ для достижения моей просьбы.

+0

Что заставляет вас чувствовать себя глупым способом? –

+1

@ Shane.C, потому что использование ЦП будет стремительно расти без уважительной причины. –

+1

Это не глупый способ сказать, но он потребует много обработки, вы можете использовать таймер вместо этого и только проверить, завершен ли поток после X-миллисекунд – Sayse

ответ

0

И почему не использовать делегата? У вас есть образец и документацию here, на официальном веб-сайте MSDN ...

Вы просто позвонить вы метод делегата до конца вашей Thread ...

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

0

Я не знаю C#, но обычно у вас будет API thread.join() или аналогичный, который ждет завершения потока.

Если вы ничего не можете заблокировать на одном и том же синхронизированном объекте.

В Java есть объекты Object.wait() и Object.notify(), которые делают трюк.

0
bool x=true; 
while(x==true){ 
if(isThreadFinished){ 
     x=false; 
     MyService.Stop(); 
     break; 
} 
} 
+0

break выйдет из цикла, остальная часть отступов не имеет значения – Sayse

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