2012-03-14 2 views
5

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

void MainThreadMain() 
{ 
    task_main = Task.Factory.StartNew(() => OtherThread()) ; 
    return; 
} 

void OtherThread() 
{ 
    while(true) 
    { 
    TellChuckNorrisJoke(); 
    } 
} 

как я могу гарантировать task_main будет продолжать работать даже, что основной поток мертв? Я предположил, иль сделать:

task_main.IsBackgorund = false; 

но такой вариант: \ я могу сделать мой основной поток не ждать сигнала от моего другого потока, что он передается в режиме переднего плана. но это глупо.

+1

Вы обеспечиваете это * не * используя нить. Просто позвоните в OtherThread() напрямую, переименовав его, конечно. –

+2

этот пост может помочь. http://stackoverflow.com/questions/6156878/can-threads-started-by-tasks-parallel-library-act-as-foreground-threads – Krishna

ответ

5

Очевидный вопрос: почему бы вам не запустить свою работу по основной теме?

Предполагая, что это не вариант, вы должны использовать Thread не Task. Затем вы можете установить:

Thread.IsBackground = false; 

Это предотвратит завершение работы вашего приложения во время работы рабочего потока.

+1

Я создаю службу. как я понимаю, метод OnStart службы предполагает вызвать другой поток и вернуться. если theres нет нити, чтобы сохранить программу, она выйдет. – Nahum

+2

Ах! Служба Windows контролируется [диспетчером управления службами] (http://msdn.microsoft.com/en-us/library/windows/desktop/ms685150 (v = vs.85) .aspx). Таким образом, у него нет нормальной «Основной темы». 'OnStart' вызывается SCM, и вы правы в том, что он должен быстро возвращаться. Так что да, имеет смысл начать «Thread» (а не «Задача»). Вам также придется реализовать 'OnPause' и' OnStop'. См. [MSDN: Приложения службы Windows] (http://msdn.microsoft.com/en-us/library/y817hyb6.aspx). –

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