Share via


타이밍 이벤트 개요

업데이트: 2007년 11월

이 항목에서는 TimelineClock 개체에서 사용 가능한 5개의 타이밍 이벤트를 사용하는 방법에 대해 설명합니다.

사전 요구 사항

이 항목을 이해하려면 애니메이션을 만들고 사용하는 방법을 이해해야 합니다. 애니메이션을 시작하려면 애니메이션 개요를 참조하십시오.

WPF의 속성에 애니메이션 효과를 주는 방법에는 여러 가지가 있습니다.

태그 및 코드로 사용할 수 있으므로 이 개요의 예제에서는 Storyboard 개체를 사용합니다. 그러나 설명된 개념은 애니메이션 효과를 주는 속성의 다른 메서드에도 적용할 수 있습니다.

Clock 정의

Timeline 자체는 시간 세그먼트를 설명하는 것 외에 어떠한 작업도 실제로 수행하지 않습니다. 실제 작업을 하는 것은 Timeline의 Clock 개체로서 Timeline에 대한 타이밍 관련 런타임 상태를 관리합니다. 스토리보드를 사용하는 경우와 같은 대부분의 경우 Clock은 사용자의 Timeline에 자동으로 만들어집니다. 또한 CreateClock 메서드를 사용하여 Clock을 명시적으로 만들 수도 있습니다. Clock 개체에 대한 자세한 내용은 애니메이션 및 타이밍 시스템 개요를 참조하십시오.

이벤트 사용 이유

마지막 틱에 일치하는 이동 작업을 제외한 모든 대화형 타이밍 조작은 비동기로 이루어집니다. 실행되는 시점을 정확히 알 수 있는 방법은 없습니다. 타이밍 조작과 관련된 다른 코드가 있는 경우 이것이 문제가 될 수 있습니다. 이를테면 사각형에 애니메이션 효과를 주는 timeline을 중단하고자 한다고 가정해 봅시다. Timeline이 중단된 후 사각형의 색을 변경합니다.

myStoryboard.Stop(myRectangle);

// This statement might execute
// before the storyboard has stopped.
myRectangle.Fill = Brushes.Blue;

이전 예제에서 코드의 두 번째 줄이 스토리보드가 중단되기 전에 실행될 수 있습니다. 중단이 비동기 조작이기 때문입니다. Timeline 또는 Clock에 중단하라고 지시하면 타이밍 엔진의 다음 번 틱이 발생할 때까지 처리되지 않는 "중단 요청"이 생성됩니다.

Timeline이 완료된 후에 명령을 실행하려면 타이밍 이벤트를 사용합니다. 다음 예제에서는 스토리보드 재생이 중단된 후에 사각형의 색을 변경하는 데 이벤트 처리기가 사용됩니다.

// Change the rectangle's color after the storyboard stops. 
void myStoryboard_CurrentStateInvalidated(object sender, EventArgs e)
{
    Clock myStoryboardClock = (Clock)sender;
    if (myStoryboardClock.CurrentState == ClockState.Stopped)
    {
        myRectangle.Fill = Brushes.Blue;
    }
}


...


// Register for the CurrentStateInvalidated timing event.
myStoryboard.CurrentStateInvalidated += new EventHandler(myStoryboard_CurrentStateInvalidated);

자세한 예제는 방법: 시계의 상태가 변경될 때 알림 받기을 참조하십시오.

Public 이벤트

TimelineClock 클래스는 모두 5개의 타이밍 이벤트를 제공합니다. 다음 표에서는 이 이벤트와 이들을 트리거하는 조건을 보여 줍니다.

이벤트

대화형 조작 트리거

기타 트리거

완료

건너 뛰어 채우기

Clock 완료

CurrentGlobalSpeedInvalidated

일시 중지, 다시 시작, 이동, 속도 비율 설정, 중지

Clock 역방향, 가속, 시작 또는 중지

CurrentStateInvalidated

시작, 건너 뛰어 채우기, 중지

Clock 시작, 중지 또는 채우기

CurrentTimeInvalidated

시작, 이동, 건너 뛰어 채우기, 중지

Clock 진행

RemoveRequested

제거

틱 및 이벤트 통합

WPF의 개체에 애니메이션 효과를 줄 때 애니메이션을 관리하는 것은 타이밍 엔진입니다. 타이밍 엔진은 시간의 진행을 추적하고 각 애니메이션의 상태를 계산합니다. 1초 안에 이러한 많은 평가가 통과되도록 합니다. 이러한 평가 통과를 "틱"이라고 합니다.

틱이 자주 발생하는 동안 틱 사이에 많은 작업이 수행될 수 있습니다. 예를 들어 Timeline이 중지되고 시작했다가 다시 중지되어 현재 상태가 세 번 변경될 수도 있습니다. 이론적으로 보면 이 이벤트는 단일 틱에서 여러 번 발생할 수 있지만 타이밍 엔진에서 이벤트를 통합하므로 각 이벤트는 대부분 틱당 한 번 발생합니다.

이벤트에 대하여 등록

타이밍 이벤트에 대해 등록하는 방법에는 Timeline을 사용하여 등록하거나 Timeline에서 만들어진 Clock을 사용하여 등록하는 두 가지 방법이 있습니다. Clock을 사용하여 직접 이벤트에 대해 등록하는 것은 코드에서만 할 수 있지만 매우 간단합니다. Timeline을 사용하여 이벤트에 대해 등록하는 것은 태그나 코드에서 할 수 있습니다. 다음 단원에서는 Timeline을 사용하여 Clock 이벤트에 대해 등록하는 방법을 설명합니다.

Timeline을 사용하여 Clock 이벤트에 대해 등록

Timeline의 Completed, CurrentGlobalSpeedInvalidated, CurrentStateInvalidated, CurrentTimeInvalidatedRemoveRequested 이벤트는 Timeline과 연관된 것처럼 보이지만 이들 이벤트에 대해 등록하는 것은 사실상 이벤트 처리기를 Timeline에 대해 생성된 Clock과 연관시키는 것입니다.

예를 들어 Timeline의 Completed 이벤트에 대해 등록할 때 실제로는 시스템에 Timeline에 대해 생성된 각 Clock의 Completed 이벤트에 대해 등록하도록 지시하는 것입니다. 코드에서 Clock이 이 Timeline에 대해 생성되기 전에 이 이벤트에 대해 등록해야 합니다. 그렇지 않으면 알림을 받을 수 없습니다. 이는 XAML에서 자동으로 발생하며, Clock이 생성되기 전에 파서는 이 이벤트에 대해 자동으로 등록합니다.

참고 항목

개념

애니메이션 및 타이밍 시스템 개요

애니메이션 개요

타이밍 동작 개요

기타 리소스

애니메이션 및 타이밍 샘플