기본적으로 사서함에 액세스하고 전자 메일을 읽는 Windows 서비스가 있습니다. 나는 매 x 초마다 사서함을 확인하는 가장 좋은 방법을 찾아 내려고 노력 중이다.x 초마다 Windows 서비스를 호출/시작하는 가장 좋은 방법은 무엇입니까?
한 가지 방법은 Thread.Sleep을 호출 한 다음 Start Method를 다시 호출하는 것입니다.
protected override void OnStart(string[] args)
{
// get config settings
CheckMailbox();
}
public void CheckMailbox()
{
int x = 5000;
// do stuff
Thread.Sleep(x);
CheckMailbox();
}
이것이 최선의 방법인지 확실하지 않습니다. 그런 다음이를 더 자세히 살펴 보려면 WCF를 통해 서비스를 노출하여 Windows 서비스를 호출 할 수 있음을 알고 있습니다. 이 경우 웹 응용 프로그램이 Process라는 프로세스를 호출하면 충돌하는 스레드가 생깁니다. 그러면 어떻게 처리할까요? 매번 새로운 스레드를 만들어서 큐에 넣어야합니까?
+1 - 좋은 지적입니다! 잠자는 동안, 서비스는 이벤트를 중지시키지 않을 것입니다. 사실입니다. –
스레딩 타이머를 사용할 때마다 10 초마다 사서함을 확인하고 열거 나 처리하는 데 10 초 이상이 걸린다 고하면 여러 스레드가 한 번에 올바르게 실행됩니다. – mickyjtwin
+1 타이머가 유용합니다! @mickyjtwin : System.Timers.Timer를 사용하는 경우 Start 및 Stop 메서드가 있으므로 Stop을 호출하고 메일을 처리 한 다음 Start를 호출 할 수 있습니다. 그렇게하면 다음 번에 확인할 때까지 메일 처리가 끝난 후 x 초가 기다리게됩니다. 그러나, 나는 당신이 제안한 경우에는 평행선을 얻을 것이라고 생각하지 않는다. Tick은 새 스레드가 아닌 타이머가 작성된 스레드에서 호출해야합니다. –