사용자가 모양을 그리는 응용 프로그램이 있습니다. 도형 위로 클릭하고 드래그하면 MouseMove 내부의 Invalidate()로 인해 CPU가 100 % 이동합니다. 타이머를 사용하고 틱 이벤트에서 Invalidate()를 호출하면 움직이는 것이 원활하지 않습니다. CPU를 최소화하고 원활하게 움직이는 다른 방법이 있습니까?CPU 사용량이 많은 GDI 그리기 응용 프로그램
` Point startDragMousePoint;
Point startShapeLocation;
private void Canvas_MouseMove(object sender, MouseEventArgs e)
{
if(isMouseDown)
{
Point deltaPoint = Point.Subtract(e.Location, new Size(startDragMousePoint));
shape.Location = Point.Add(startShapeLocation, new Size(deltaPoint));
Invalidate();
}
}
private void Canvas_Paint(object sender, PaintEventArgs e)
{
shape.Render(e.Graphics);
}`
"무효화"방법이란 무엇입니까? Dispatcher 클래스를 사용하여 백그라운드 스레드로 논리를 푸시하고 Dispatcher 속성을 더 낮은 값으로 설정할 수 있습니까? GDI Invalidate()의 –
은 창을 강제로 다시 그립니다. 그것은 마이크로 소프트 라이브러리 기능입니다. – Jbecwar