위에서 언급했듯이 this.CreateGraphics()
은 실제로 전체 양식 자체 인 동일한 그래픽 객체에 대한 참조를 작성합니다. 이슈 스레딩을 제외하고는 드로잉이 다른 스크린을 표현하기 위해 사전 정의 된 드로잉 영역을 벗어나지 않도록함으로써 이론적으로는 코드에서이를 처리 할 수 있습니다. 이것은 약간의 하드 코딩을 필요로하고 내 스타일이나 선호도가 아닙니다.
이럴 훨씬 더 나은 방법은 다음
Image screen1 = new Bitmap(100, 100); // (width, height)
Image screen2 = new Bitmap(100, 100); // (width, height)
는 별도로 각 이미지의 표면에 그리는 "각 보유하는 이미지 뷰어와 같은 간단한 일을 사용할 수 있습니다 ... 메모리에 두 개의 이미지 객체를 생성하는 것입니다 보기 "...
private void DrawGame()
{
DrawSprite1(Graphics.FromImage(screen1));
DrawSprite2(Graphics.FromImage(screen2));
}
public void DrawSprite1(Graphics g)
{
g.FillEllipse(Pens.Blue, screen1.GetBounds());
}
public void DrawSprite2(Graphics g)
{
g.FillRect(Brushes.Red, screen2.GetBounds());
}
은 물론, 문제는이 문제에 접근하는 유일한 방법은 아니지만, 자신의 솔루션으로 당신에게 영감을 참조 표기하고 있습니다. :)
당신은 다른 스레드에 그 그래픽 객체를 부여한다는 말입니까? 얼마나 많은 (심지어 1 개의) 그래픽 객체를 만들지에 관계없이 파트가 혼자서하는 것이 안전하지 않다는 것을 확신합니다. –
예. 그들은 다른 스레드로 보내집니다. 같은 시간에 애니메이션을 계속하려면 객체가 필요합니다. 하나는 항상 다시 그려지며, 다른 하나는 사용자가 움직이면 다시 그려집니다. 슬프게도, 동시에 발생합니다. 내가 뭘 권하고 싶니? – codeblooded
내가 뭘할지 모르지만 .NET Framework의 컨트롤에 대한 멀티 스레드 액세스가 지원되지도 안전하지도 않습니다. –