2011-05-13 5 views
15

파생 클래스에서 OnStart()과 생성자 간의 차이점을 이해하려고합니다. 주위를 읽는 것으로서 처음으로 서비스를 시작한 후 (컴퓨터를 켠 후에) 생성자가 호출 된 것 같습니다. 그런 다음 원하는만큼 여러 번 서비스를 중지했다가 시작할 수 있지만 생성자는 다시 호출되지 않으므로 매번 OnStart() 메서드 만 호출됩니다. 누구든지 확인할 수 있습니까?C# service - OnStart() v 생성자

감사

+0

예, 확인할 수 있습니다. 그리고 그것은 전적으로 논리적입니다. –

+0

이 질문에 감사드립니다. – alvonellos

답변

15

OnStart에 있어야 처리를 수행 할 생성자를 사용하지 마십시오. OnStart을 사용하여 서비스 초기화를 모두 처리하십시오. 생성자는 응용 프로그램의 실행 파일이 실행될 때 호출되며 서비스가 실행될 때 호출되지 않습니다. 실행 파일은 OnStart 전에 실행됩니다. 예를 들어 계속 진행하면 SCM이 이미 객체를 메모리에 보유하고 있기 때문에 생성자가 다시 호출되지 않습니다. OnStopOnStart 대신 생성자에서 할당 된 리소스를 해제하면 필요한 리소스가 두 번째로 호출 될 때 다시 만들어지지 않습니다. MSDN

+0

감사합니다. 그냥 내가 이해했는지 확인하고 싶었어. 내 70-536 공부. – Ronnie

+2

예를 들어, 서비스가있어서 이벤트 핸들러를 초기화해야하는 경우 onStart에서 처리하고 싶습니다. 그렇지 않으면 처리기에서 여러 인스턴스가 초기화 될 것입니다? –

+0

OnStart에서 이벤트를 구독하는 경우 OnStop에서 이벤트를 구독 취소해야합니다. – johnw182

2

예. 생성자는로드 당 한 번 호출되며 사용자 (또는 자동화)가 서비스를 시작하고 중지 할 때 시작이 발생할 수 있습니다.

4

약간의 변형은 하나의 서비스 또는 여러 서비스가 포함되어 있는지에 따라 다릅니다. 여기에 실행 파일이 하나의 서비스를 포함하는 경우, docs

에서 라인의 시작은 SCM에서 선택 이며, 정지가 호출되는 경우 소멸자를 실행할 때 시스템은 서비스의 생성자를 호출합니다.

실행이 생성자의 원인 하나 개의 서비스에서 시작을 호출, 여러 서비스가 포함되어있는 경우

는 실행 파일에 을 모든 서비스에 대한 를 호출 할 수 있지만 지정된 서비스는 가 시작됩니다. 서비스의 소멸자는 모든 서비스가 중지되었을 때 함께 실행됩니다 ( ). 각 서비스가 중지 될 때마다 개별적으로 이 중지되지 않습니다.

그러나 oxilumin의 대답은 아마도 당신이 겪은 것입니다.