타이머Timers

.NET은 다중 스레드 환경에서 사용할 다음 두 개의 타이머를 제공합니다..NET provides two timers to use in a multithreaded environment:

참고

일부 .NET 구현에는 다음과 같은 추가 타이머가 포함될 수 있습니다.Some .NET implementations may include additional timers:

  • System.Windows.Forms.Timer: 이벤트를 정기적으로 발생시키는 Windows Forms 구성 요소입니다.System.Windows.Forms.Timer: a Windows Forms component that fires an event at regular intervals. 이 구성 요소에는 사용자 인터페이스가 없으며, 단일 스레드 환경에서 사용하도록 설계되었습니다.The component has no user interface and is designed for use in a single-threaded environment.
  • System.Web.UI.Timer: 비동기 또는 동기 웹 페이지 포스트백을 정기적으로 수행하는 ASP.NET 구성 요소입니다.System.Web.UI.Timer: an ASP.NET component that performs asynchronous or synchronous web page postbacks at a regular interval.
  • System.Windows.Threading.DispatcherTimer: 지정된 시간 간격 및 지정된 우선 순위로 처리되는 Dispatcher 큐에 통합된 타이머입니다.System.Windows.Threading.DispatcherTimer: a timer that is integrated into the Dispatcher queue which is processed at a specified interval of time and at a specified priority.

System.Threading.Timer 클래스The System.Threading.Timer class

System.Threading.Timer 클래스를 사용하면 대리자를 지정된 시간 간격으로 계속 호출할 수 있습니다.The System.Threading.Timer class enables you to continuously call a delegate at specified time intervals. 또한 이 클래스를 사용하여 지정된 시간 간격으로 대리자에 대한 단일 호출을 예약할 수 있습니다.You also can use this class to schedule a single call to a delegate in a specified time interval. 대리자는 ThreadPool 스레드에서 실행됩니다.The delegate is executed on a ThreadPool thread.

System.Threading.Timer 개체를 만들 때 콜백 메서드를 정의하는 TimerCallback 대리자, 콜백에 전달되는 선택적 상태 개체, 콜백의 첫 번째 호출까지 지연되는 시간 및 콜백 호출 간의 시간 간격을 지정합니다.When you create a System.Threading.Timer object, you specify a TimerCallback delegate that defines the callback method, an optional state object that is passed to the callback, the amount of time to delay before the first invocation of the callback, and the time interval between callback invocations. 보류 중인 타이머를 취소하려면 Timer.Dispose 메서드를 호출합니다.To cancel a pending timer, call the Timer.Dispose method.

다음 예제에서는 제공된 대리자를 1초(1,000밀리초) 후에 처음 호출한 다음, 2초마다 호출하는 타이머를 만듭니다.The following example creates a timer that calls the provided delegate for the first time after one second (1000 milliseconds) and then calls it every two seconds. 이 예제의 상태 개체는 대리자를 호출한 횟수를 계산하는 데 사용됩니다.The state object in the example is used to count how many times the delegate is called. 대리자가 10회 이상 호출되면 타이머가 중지됩니다.The timer is stopped when the delegate has been called at least 10 times.

using namespace System;
using namespace System::Threading;

ref class TimerState
{
public:
    int counter;
};

ref class Example
{
private:
    static Timer^ timer;

public:
    static void TimerTask(Object^ state)
    {
        Console::WriteLine("{0:HH:mm:ss.fff}: starting a new callback.", DateTime::Now);

        TimerState^ timerState = dynamic_cast<TimerState^>(state);
        Interlocked::Increment(timerState->counter);
    }

    static void Main()
    {
        TimerCallback^ tcb = gcnew TimerCallback(&TimerTask);
        TimerState^ state = gcnew TimerState();
        state->counter = 0;
        timer = gcnew Timer(tcb, state, 1000, 2000);

        while (state->counter <= 10)
        {
            Thread::Sleep(1000);
        }

        timer->~Timer();
        Console::WriteLine("{0:HH:mm:ss.fff}: done.", DateTime::Now);
    }
};

int main()
{
    Example::Main();
}
using System;
using System.Threading;
using System.Threading.Tasks;

class Program
{
    private static Timer timer;

    static void Main(string[] args)
    {
        var timerState = new TimerState { Counter = 0 };

        timer = new Timer(
            callback: new TimerCallback(TimerTask),
            state: timerState,
            dueTime: 1000,
            period: 2000);

        while (timerState.Counter <= 10)
        {
            Task.Delay(1000).Wait();
        }

        timer.Dispose();
        Console.WriteLine($"{DateTime.Now:HH:mm:ss.fff}: done.");
    }

    private static void TimerTask(object timerState)
    {
        Console.WriteLine($"{DateTime.Now:HH:mm:ss.fff}: starting a new callback.");
        var state = timerState as TimerState;
        Interlocked.Increment(ref state.Counter);
    }

    class TimerState
    {
        public int Counter;
    }
}
Imports System.Threading

Module Program

    Private Timer As Timer

    Sub Main(args As String())

        Dim StateObj As New TimerState
        StateObj.Counter = 0

        Timer = New Timer(New TimerCallback(AddressOf TimerTask), StateObj, 1000, 2000)

        While StateObj.Counter <= 10
            Task.Delay(1000).Wait()
        End While

        Timer.Dispose()
        Console.WriteLine($"{DateTime.Now:HH:mm:ss.fff}: done.")
    End Sub

    Private Sub TimerTask(ByVal StateObj As Object)

        Console.WriteLine($"{DateTime.Now:HH:mm:ss.fff}: starting a new callback.")

        Dim State As TimerState = CType(StateObj, TimerState)
        Interlocked.Increment(State.Counter)
    End Sub

    Private Class TimerState
        Public Counter As Integer
    End Class
End Module

자세한 내용과 예제는 System.Threading.Timer를 참조하세요.For more information and examples, see System.Threading.Timer.

System.Timers.Timer 클래스The System.Timers.Timer class

다중 스레드 환경에서 사용할 수 있는 또 다른 타이머는 System.Timers.Timer이며, 기본적으로 ThreadPool 스레드에서 이벤트를 발생시킵니다.Another timer that can be used in a multithreaded environment is System.Timers.Timer that by default raises an event on a ThreadPool thread.

System.Timers.Timer 개체를 만들 때 Elapsed 이벤트가 발생되는 시간 간격을 지정할 수 있습니다.When you create a System.Timers.Timer object, you may specify the time interval in which to raise an Elapsed event. Enabled 속성을 사용하여 타이머에서 Elapsed 이벤트가 발생되어야 하는지 여부를 나타냅니다.Use the Enabled property to indicate if a timer should raise an Elapsed event. 지정된 간격이 지난 후에 Elapsed 이벤트가 한 번만 발생해야 하는 경우 AutoResetfalse로 설정합니다.If you need an Elapsed event to be raised only once after the specified interval has elapsed, set the AutoReset to false. AutoReset 속성의 기본값은 true이며, 이는 즉 Elapsed 이벤트가 Interval 속성에 정의된 간격으로 정기적으로 발생하는 것을 의미합니다.The default value of the AutoReset property is true, which means that an Elapsed event is raised regularly at the interval defined by the Interval property.

자세한 내용과 예제는 System.Timers.Timer를 참조하세요.For more information and examples, see System.Timers.Timer.

참고 항목See also