다음을 통해 공유


Timer 클래스

응용 프로그램에 되풀이 이벤트를 생성합니다.

네임스페이스: System.Timers
어셈블리: System(system.dll)

구문

‘선언
Public Class Timer
    Inherits Component
    Implements ISupportInitialize
‘사용 방법
Dim instance As Timer
public class Timer : Component, ISupportInitialize
public ref class Timer : public Component, ISupportInitialize
public class Timer extends Component implements ISupportInitialize
public class Timer extends Component implements ISupportInitialize

설명

참고

이 클래스에 적용되는 HostProtectionAttribute 특성의 Resources 속성 값은 Synchronization | ExternalThreading입니다. HostProtectionAttribute는 대개 아이콘을 두 번 클릭하거나, 명령을 입력하거나, 브라우저에서 URL을 입력하여 시작되는 데스크톱 응용 프로그램에 영향을 미치지 않습니다. 자세한 내용은 HostProtectionAttribute 클래스나 SQL Server 프로그래밍 및 호스트 보호 특성을 참조하십시오.

Timer 구성 요소는 서버 기반 타이머입니다. 이것을 사용하면 응용 프로그램에서 Elapsed 이벤트가 발생하는 되풀이 간격을 지정할 수 있습니다. 그런 다음 이 이벤트에서 정규적으로 처리하도록 관리할 수 있습니다. 예를 들어, 하루 24시간씩 일주일 내내 실행해야 하는 중요한 서버가 있다고 가정합니다. Timer를 사용하는 서비스를 만들면 주기적으로 서버를 확인하여 시스템이 정상적으로 가동되도록 할 수 있습니다. 시스템이 응답하지 않으면 해당 서비스에서 서버를 다시 시작하려고 시도하거나 관리자에게 알립니다.

서버 기반 Timer는 다중 스레드 환경에서 작업자 스레드와 함께 사용할 수 있도록 설계되었습니다. 서버 타이머는 스레드 간을 이동하여 발생한 Elapsed 이벤트를 처리할 수 있습니다. 따라서 제때에 이벤트를 발생시키는 데 있어서는 Windows 타이머보다 훨씬 정확합니다. 서버 기반 타이머에 대한 자세한 내용은 서버 기반 타이머 소개를 참조하십시오.

Timer 구성 요소는 Interval 속성의 값에 따라 Elapsed 이벤트를 발생시킵니다. 사용자는 필요한 처리를 수행하도록 이 이벤트를 관리할 수 있습니다. 예를 들어, 데이터베이스에 판매 주문서를 계속하여 게시하는 온라인 판매 응용 프로그램이 있다고 가정합니다. 발송 지침을 컴파일하는 서비스에서는 각 주문서를 개별적으로 처리하지 않고 주문서를 묶어서 처리합니다. Timer를 사용하여 30분마다 일괄 처리를 시작할 수 있습니다.

참고

AutoResetfalse로 설정하면 Timer는 첫째 Interval이 경과한 후 Elapsed 이벤트를 한 번만 발생시킵니다. IntervalElapsed 이벤트를 계속 발생시키려면 AutoResettrue로 설정합니다.

Elapsed 이벤트는 ThreadPool 스레드에서 발생합니다. Elapsed 이벤트의 처리가 Interval보다 오래 지속되면 다른 ThreadPool 스레드에서 다시 이벤트가 발생할 수 있습니다. 따라서 이벤트 처리기가 재진입 가능해야 합니다.

참고

한 스레드에서 이벤트 처리 메서드를 실행하는 동시에 다른 스레드에서 Stop 메서드를 호출하거나 Enabled 속성을 false로 설정할 수 있습니다. 그 결과 타이머가 중지된 후에 Elapsed 이벤트가 발생할 수 있습니다. Stop 메서드의 예제 코드에서는 이러한 경합 상태의 발생을 방지하는 방법을 보여 줍니다.

폼이나 컨트롤과 같은 사용자 인터페이스 요소에 Timer를 사용한 경우에는 이벤트가 사용자 인터페이스 스레드로 마샬링되도록 Timer가 있는 폼이나 컨트롤을 SynchronizingObject 속성에 할당합니다.

Timer는 런타임에 표시되지 않습니다.

Timer 인스턴스의 초기 속성 값 목록을 보려면 Timer 생성자를 참조하십시오.

예제

다음 예제에서는 5초마다 콘솔에 "Hello World!"를 표시하는 Timer를 만듭니다.

이 예제에서는 System.Timers 네임스페이스를 사용합니다.

Imports System
Imports System.Timers

Public Class Timer1
    
    Public Shared Sub Main()
        ' Normally, the timer is declared at the class level, so
        ' that it doesn't go out of scope when the method ends.
        ' In this example, the timer is needed only while Main 
        ' is executing. However, KeepAlive must be used at the
        ' end of Main, to prevent the JIT compiler from allowing 
        ' aggressive garbage collection to occur before Main 
        ' ends.
        Dim aTimer As New System.Timers.Timer()

        ' Hook up the Elapsed event for the timer.
        AddHandler aTimer.Elapsed, AddressOf OnTimedEvent

        ' Set the Interval to 2 seconds (2000 milliseconds).
        aTimer.Interval = 2000
        aTimer.Enabled = True
        
        Console.WriteLine("Press the Enter key to exit the program.")
        Console.ReadLine()

        ' Keep the timer alive until the end of Main.
        GC.KeepAlive(aTimer)
    End Sub
        
    ' Specify what you want to happen when the Elapsed event is 
    ' raised.
    Private Shared Sub OnTimedEvent(source As Object, e As ElapsedEventArgs)
        Console.WriteLine("Hello World!")
    End Sub
End Class
using System;
using System.Timers;

public class Timer1
{
    public static void Main()
    {
        // Normally, the timer is declared at the class level, so
        // that it doesn't go out of scope when the method ends.
        // In this example, the timer is needed only while Main 
        // is executing. However, KeepAlive must be used at the
        // end of Main, to prevent the JIT compiler from allowing 
        // aggressive garbage collection to occur before Main 
        // ends.
        System.Timers.Timer aTimer = new System.Timers.Timer();

        // Hook up the Elapsed event for the timer.
        aTimer.Elapsed += new ElapsedEventHandler(OnTimedEvent);

        // Set the Interval to 2 seconds (2000 milliseconds).
        aTimer.Interval = 2000;
        aTimer.Enabled = true;
 
        Console.WriteLine("Press the Enter key to exit the program.");
        Console.ReadLine();

        // Keep the timer alive until the end of Main.
        GC.KeepAlive(aTimer);
    }
 
    // Specify what you want to happen when the Elapsed event is 
    // raised.
    private static void OnTimedEvent(object source, ElapsedEventArgs e)
    {
        Console.WriteLine("Hello World!");
    }
}
 
#using <system.dll>

using namespace System;
using namespace System::Timers;

public ref class Timer1
{
public:
   static void Demo()
   {
      // Normally, the timer is declared at the class level, so
      // that it doesn't go out of scope when the method ends.
      // In this example, the timer is needed only while Demo
      // is executing. However, KeepAlive must be used at the
      // end of Demo, to prevent the JIT compiler from allowing 
      // aggressive garbage collection to occur before Demo
      // ends.
      System::Timers::Timer^ aTimer = gcnew System::Timers::Timer;

      // Hook up the Elapsed event for the timer.
      aTimer->Elapsed += gcnew ElapsedEventHandler( Timer1::OnTimedEvent );
      
      // Set the Interval to 2 seconds (2000 milliseconds).
      aTimer->Interval = 2000;
      aTimer->Enabled = true;

      Console::WriteLine("Press the Enter key to exit the program.");
      Console::ReadLine();

      // Keep the timer alive until the end of the Demo method.
      GC::KeepAlive(aTimer);
   }


private:
   // Specify what you want to happen when the Elapsed event is 
   // raised.
   static void OnTimedEvent( Object^ /*source*/, ElapsedEventArgs^ /*e*/ )
   {
      Console::WriteLine( "Hello World!" );
   }

};

int main()
{
   Timer1::Demo();
}

상속 계층 구조

System.Object
   System.MarshalByRefObject
     System.ComponentModel.Component
      System.Timers.Timer

스레드로부터의 안전성

이 형식의 공용 static 멤버는 모두 다중 스레드 작업에 대해 안전합니다. 모든 인스턴스 멤버는 스레드로부터 안전하지 않을 수 있습니다.

플랫폼

Windows 98, Windows 2000 SP4, Windows Millennium Edition, Windows Server 2003, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP SP2, Windows XP Starter Edition

.NET Framework에서 모든 플래폼의 모든 버전을 지원하지는 않습니다. 지원되는 버전의 목록은 시스템 요구 사항을 참조하십시오.

버전 정보

.NET Framework

2.0, 1.1, 1.0에서 지원

참고 항목

참조

Timer 멤버
System.Timers 네임스페이스
AutoReset
Interval
Elapsed
Timer

기타 리소스

서버 기반 타이머 소개