http://hewoo.tistory.com/5
3. CompositionTarget의 Redering 이벤트 핸들러 이용
마지막으로 CompositionTarget의 Rendering 이벤트 핸들러는 이용하는 방법이 있다.
이것은 모니터의 수직 주파수 보다 빠른 랜더링을 요구 할때 DispatcherTimer를 포기 하고 쓰는 방법이다.
이것도 예제 코드를 보면서 이야기 하겠다.
public Window1()
{
InitializeComponent();
InitUI();
SetCompositionTarget();
}
private void SetCompositionTarget()
{
CompositionTarget.Rendering += new EventHandler(CompositionTarget_Rendering);
}
void CompositionTarget_Rendering(object sender, EventArgs e)
{
Canvas.SetLeft(MyEllipseCanvas, XPos);
if (XPos > this.Width)
XPos = 0;
else
XPos += 0.5;
}
엄청 간단하다.^^
CompositonTarget은 System.Windows.Media 네임 스페이스를 쓰면 이용가능하다.
한가지 특이한 사실은 DispatcherTimer를 쓸때는 Thread.Sleep(1); 해줘야 CPU 점유율이 떨어지는데,
이건 Sleep를 쓰지 않아도 CPU 점유율이 높이않다. (오히려 DispatcherTimer 쓸때 보다 낮다.)
그렇다면 CompositonTarget은 어디서 온걸까?
바로 WPF가 화면에 객체를 뿌리는 Reder 방식인 것이다.
WPF를 내부적으로 보면 화면에 GPU 가속을 이용하여 Thread 형식으로 오브젝트를 계속 뿌린다.
GDI 방식과 차이가 있다. 그렇기 때문에 화면에 뿌려지는 속도가 매우 빠르다는 것을 알 수 있다.
이제 까지 3가지 애니메이션 시키는 방법에 대해 알아 보았다.
사용은 여러분 자유다.^^
추신 : 전체 소스코드를 같이 올린다. 참고하시길~!
'프로그래밍(Programming) > WPF' 카테고리의 다른 글
WPF treeview custom 편집 추가 하여 사용하기 (0) | 2014.08.26 |
---|---|
키보드 입력 15. [WPF 기초 강좌] 사용자입력 1 (0) | 2014.07.30 |
마우스 입력 16. [WPF 기초 강좌] 사용자입력 2 (0) | 2014.07.30 |