2016-07-14 1 views
-1

페인트 이벤트를 사용하여 애니메이션 배경으로 창을 만들고 싶습니다. 이처럼 : 잘 작동하지만 다른 작업을 수행 할수 없어C# Win Forms Background Animation

using System; 
using System.Drawing; 
using System.Windows.Forms; 
using System.Threading; 

namespace DrawGUI 
{ 
    public partial class Form1 : Form 
    { 
     public Form1() 
     { 
      InitializeComponent(); 
     } 

     private void Form1_Paint(object sender, PaintEventArgs e) 
     { 
      Graphics g = e.Graphics; 
      int w = this.ClientSize.Width; 
      int h = this.ClientSize.Height; 

      g.DrawLine(Pens.Red, 0, h/2 - 20, w, h/2 - 20); 

      int a = 0; 
      while (true) 
      { 
       a++; 
       g.DrawRectangle(Pens.Gray, a, h/2 - 20, 40, 40); 
       g.DrawRectangle(Pens.Red, a, h/2 - 20, 40, 40); 
       Thread 
      } 
     } 
    } 
} 

. 백그라운드에서 페인트 이벤트를 실행하려면 어떻게해야합니까?

+0

물론 아무것도 할 수 없으며 무한 루프가 있습니다. – Kinetic

+0

기본적인 애니메이션 기술에 대한 책을 가져와야합니다. 이것은 실제로이 유형의 기본 자습서에 대한 포럼이 아닙니다 – edtheprogrammerguy

답변

2

Paint 이벤트를 백그라운드에서 실행할 수 없습니다. GUI 스레드에서 항상 발생하며 백그라운드 스레드에서 그리기를 시도하면 어쨌든 크로스 스레드 오류가 발생합니다. 백그라운드 스레드에서 Control을 수정하는 것은 불법입니다.

은 당신이 대신 Paint 이벤트 핸들러 내부 사용자의 while 루프의하고 싶은 것은 자주 당신은 디스플레이를 업데이트 할로 발사하고, 그 타이머의 Tick 핸들러 호출 Invalidate()에서 Timer을 설정하는 것입니다. 그런 다음 Paint 이벤트 핸들러에서 Control의 필드를 통해 반복중인 이벤트를 추적하고 그에 따라 그립니다.

+0

고마워요. 나는 그것을 시도 할 것입니다. –

관련 문제