2009-11-13 5 views
1

나는 짝수 처리기 메서드를 30 초마다 호출하는 타이머가 있습니다. 하지만이 메서드를 initialy로 호출하고 싶습니다. 이벤트 처리기 메서드의 서명은Timer를 호출하는 올바른 방법은 무엇입니까 ElapsedEventHandler

void TimerElapsed_GenerateRunTimes(object sender, System.Timers.ElapsedEventArgs e) 

그래서 내가 어떻게 바로 전화해야입니까? 난 다음

TimerElapsed_GenerateRunTimes(timerGenerateRunTimes,null); 

을 할 수 있지만, 나는이 이벤트 인수 e는 null가됩니다 그 방법 외에 그것을 을 할 수있는 올바른 방법입니다 확실하지 않다

답변

1

당신이 e 존재에 의존하지 않는 경우 null이 아니며 null으로 메소드를 호출해도 문제가 발생하지 않습니다. 그것은 결국 당신의 방법이며, 일부 대리인의 서명과 일치한다는 점을 제외하고는 특별한 것이 없습니다. 메소드 본문에 sender을 사용하지 않으면 타이머 객체를 전달할 필요조차 없습니다.

(참고 : 이벤트와 자신의 클래스를 구현하는 경우, 당신은 항상 sender 이벤트를 높이는 방법에서 e에 대해 널 (NULL)이 아닌 객체로 this에 전달할 수 있습니다.)

3

적어도 null 대신 EventArgs.Empty 객체를 전달하십시오.

TimerElapsed_GenerateRunTimes(this, EventArgs.Empty); 
+0

이 경우 "this"는 타이머가 아니라 ServiceBase 클래스를 참조합니다. – Karim

0

그것은 아마도 타이머의 작업을 수행하는 별도의 함수를 만드는 가장 좋은, 그냥 것 : 또한, 좋은 연습 (AFAIK)는 키워드 '이'보낸 사람으로와 이벤트가 수동 호출하는 것입니다 전화 해. 이렇게하면 나중에 이벤트 처리기에서 발신자 또는 이벤트 인수를 확인하려는 경우 미래에 혼란이 없을 것입니다. 또한 코드에서 코드가 수동으로 활성화되었는지 또는 이벤트에서 활성화되었는지 여부를 알 수 있습니다.

관련 문제