이것은 대개/OnStart
처리기 내부에서 실행중인 코드가 너무 많거나 많으면 발생합니다. 서비스가 시작된 것으로 간주되는 경우에만 반환합니다.
일반적으로 항상 실행하려는 코드를 실행하는 하나 이상의 새로운 Thread
을 만들고 Start()
을 반환 한 다음 반환하십시오. 또는 암시 적으로 자체 스레드 (예 : WCF의 ServiceHost
)를 실행하는 개체를 만듭니다.
그런 다음 정상적으로 종료하려면 사용자의 작업이 OnStop
입니다. 예 : Set
ManualResetEvent
그런 다음 해당 스레드에서 Join
입니다.
예를 들어,이 (테스트하지)
public class MyService : ServiceBase {
private ManualResetEvent _stop = new ManualResetEvent(false);
private Thread _worker;
public override void OnStart(string[] args) {
_worker = new Thread(DoStuff);
_worker.Start();
}
public override void OnStop() {
_stop.Set();
_worker.Join();
}
private void DoStuff() {
while(!_stop.WaitOne(0)) {
//Do something useful here.
}
}
}
처럼 보일 수 있습니다 수업이 너무 많이가있는 경우 보통 일이/당신의'OnStart' 핸들러 내에서 실행되는 모든 코드 - 당신이 일을 킥오프 의미하고 그곳에 * 돌아온다. 서비스가 시작된 것으로 간주되는 경우에만 반환합니다. –
어떻게 거기로 돌아갈 수 있습니까? – Joetjah