.NET 의 Timer 형식 용법 상세 설명

3864 단어 .NETTimer
.NET FrameWork 에 타이머 가 여러 개 있 는데 실제 상황 에 따라 어떻게 선택 하 느 냐 가 문제 다.
전체적으로 말 하면 타 이 머 는 모두 다음 과 같은 네 가지 가 있다.
다 중 스 레 드 타이머:
1 System.Threading.Timer
2 System.Timers.Timer
특수 환경의 단일 스 레 드 타이머:
1 System.Windows.Forms.Timer(사용 환경:Windows Forms Timer)
2 System.Windows.Threading.DispatcherTimer(사용 환경:WPF timer);
메 인 스 레 드 에서 실행 되 기 때문에 단일 스 레 드 타 이 머 는 안전 합 니 다.Windows Forms 나 WPF 의 컨트롤 값 을 업데이트 하 는 간단 한 작업 에 더욱 편리 합 니 다.예 를 들 어 시계 와 계수 표시.그렇지 않 으 면 다 중 스 레 드 타이머 가 필요 합 니 다.
원리:단일 스 레 드 는 메시지 순환 체 제 를 사용 합 니 다.이것 은 Tick 사건 이 항상 timer 를 만 드 는 그 스 레 드 에서 실 행 된 다 는 것 을 의미 합 니 다.또한 이전 Tick 메시지 가 처리 되 지 않 으 면 시간 이 간격 을 초과 하 더 라 도 메시지 순환 에 하나의 Tick 소모 만 존재 한 다 는 것 을 의미 합 니 다.
예제 코드 는 다음 과 같다.

public static void Main()
{
System.Windows.Forms.Timer tmr = new System.Windows.Forms.Timer();
tmr.Tick += new EventHandler(tmr_Tick);
tmr.Start();//     
tmr.Stop();//     
tmr.Enabled =true;//              
tmr.Interval = 10000; //         (10 ),      ,      tmr_Tick  10         .
}
void tmr_Tick(object sender, EventArgs e)
{
  //              
}

tmrTick 실행 시간 이 길 면 UI 인터페이스 가 멈 춥 니 다.아래 그림 과 같 습 니 다.

다 중 스 레 드 타 이 머 는 비교적 강하 고 정확 하 며 확장 성 이 강하 다.다 중 스 레 드 타 이 머 를 사용 할 때 메 인 스 레 드 에 아무런 영향 을 주지 않 고 위의 그림 이 표시 되 는 상황 도 나타 나 지 않 습 니 다.
원리:다 중 스 레 드 타이머 가 리 셋 방법 을 사용 하고 스 레 드 탱크 스 레 드 에서 서 비 스 를 제공 합 니 다.타이머 간격 이 이 리 셋(Tick 방법)을 실행 하 는 데 필요 한 시간 보다 적 을 때 리 셋 은 여러 스 레 드 에서 동시에 실 행 될 수 있 습 니 다.예 를 들 어 타이머 의 시간 간격 이 5 초 이지 만 5 초 가 지나 도 지난번 리 셋 이 완료 되 지 않 았 습 니 다.이 때 새로운 리 셋 은 새로운 스 레 드 에서 실 행 될 것 입 니 다.개발 중 에는 이러한 상황 을 피해 야 합 니 다.
System.Threading.Timer 는 가장 간단 한 다 중 스 레 드 타이머 입 니 다.
System.Threading.Timer 를 사용 하려 면 인용 을 유지 해 야 합 니 다.어떤 위탁 관리 대상 에 대해 서도 타이머 에 대한 인용 이 없 으 면 타 이 머 는 쓰레기 로 회수 된다.타이머 가 여전히 활동 상태 에 있 더 라 도 회수 된다.
 
아래 의 예 에서 타 이 머 는 5 초 후에 1 초 동안 Tick 방법 을 사용 하기 시작 합 니 다.

public static void Main()
{
int duetime = 5000;
int period = 1000;
System.Threading.Timer timer = new System.Threading.Timer(Tick," Tick      ,object  ",duetime ,period );
duetime = 10000;
period = 2000;
//       10       2 
timer.Change(duetime, period);
//     
timer.Dispose();
}
static void Tick(object data)
{
 Console.WriteLine(data);
//          ,                    ,      Control.Invoke BeginInvoke  ,   ,  :
this.BeginInvoke((MethodInvoker)delegate()
{
  this.lbl_w.Text = data.ToString ();
 }); 
}
.net framework 가 제공 하 는 또 다른 타이머 System.Timers.Timer.System.Threading.Timer 를 간단하게 포장 하 였 습 니 다.다음 몇 가지 특성 이 추가 되 었 습 니 다:
1.Component 를 실 현 했 기 때문에 디자이너 에 표시 할 수 있 습 니 다.
2.변경 방법 대신 Interval 속성 사용
3.Elapsed 이벤트,timer 를 시작 하고 정지 하 는 Start 와 Stop 방법 을 추가 합 니 다.
4.AutoReset 속성 을 기본적으로 True 로 추가 하여 지정 한 간격 이 끝 날 때마다 Elapsed 이 벤트 를 일 으 킬 지,아니면 Elapsed 이 벤트 를 한 번 만 실행 하면 끝 날 지 지정 합 니 다.
예제 코드 는 다음 과 같다.

public static void MainThread()
{
 System.Timers.Timer Timer tmr=new System.Timers.Timer();
 tmr.Interval=500;
 tmr.Elapsed+=newElapsedEventHandler(tmr_Elapsed);
 tmr.AutoReset = false;
 tmr.Start();
 Console.ReadLine();
 tmr.Stop();
 Console.ReadLine();
 tmr.Dispose();
}
void tmr_Elapsed(objectsender,ElapsedEventArgse)
{
 Console.WriteLine("Tick...");
}
결론:
WPF 와 Windows Forms 의 단일 스 레 드 타 이 머 는 작은 작업,특히 인터페이스 업데이트 작업 에 적합 합 니 다.예 를 들 어 시계 와 계수 표시.
그렇지 않 으 면 다 중 스 레 드 타 이 머 를 사용 할 수 있 습 니 다.어떤 다 중 스 레 드 타 이 머 를 사용 하 는 지 는 자신의 수요 에 따라 결정 할 수 있 습 니 다.
본 고 에서 말 한 것 이 여러분 이.net 에서 timer 의 용법 을 파악 하 는 데 도움 이 되 기 를 바 랍 니 다.

좋은 웹페이지 즐겨찾기