2013-06-14 9 views
1

line in picturebox를 그리는 동안 시간 지연을 추가하는 방법은 무엇입니까? 나는 2010 년지연이있는 선을 그리는 방법은 무엇입니까?

Graphics g = picturebox.CreateGraphics(); 
Pen p = new Pen(Color.Red); 
for (int j = 1; j < 10; j++) 
{ 
    //Draw Line 1 
    g.DrawLine(p,j*3,j*3,100,100); 

    //----->How to put a Delay for 2 seconds So I 
    //  see the first line then see the second after 2 sec 

    //Draw Line 2 
    g.DrawLine(p,j*10,j*10,100,100); 
} 
+1

Winforms가 목표가되면 프로그램하는 데는 * 매우 다른 방법이 필요합니다. Winforms는 그것을 잘 지원하지만, 표준 프로젝트 템플릿은 거기에 도달하는 것을 돕지 않습니다. Google은 "winforms game loop"를 통해 힌트를 찾습니다. –

답변

2

를 넣어 비주얼 스튜디오 C#을 사용하고 있습니다. 그릴 준비가되면 타이머를 활성화하고 그릴 필요가있는 다양한 선 (예 : 목록/배열)을 추적합니다. 타이머가 발생할 때마다 타이머의 콜백 함수에서 1 줄을 그리고 "줄 인덱스"(다음 줄을 그리는 줄)를 증가시킵니다. 모든 라인이 그려지면 타이머를 비활성화하십시오. 예를 들어

:

public partial class DrawingForm : Form 
{ 
    Timer m_oTimer = new Timer(); 

    public DrawingForm() 
    { 
     InitializeComponent(); 

     m_oTimer.Tick += new EventHandler (m_oTimer_Tick); 
     m_oTimer.Interval = 2000; 
     m_oTimer.Enabled = false; 
    } 

    // Enable the timer and call m_oTimer.Start() when 
    // you're ready to draw your lines. 

    void m_oTimer_Tick (object sender, EventArgs e) 
    { 
     // Draw the next line here; disable 
     // the timer when done with drawing. 
    } 
} 
-2

이 도면 양식에 타이머를 사용 System.Threading.Thread.Sleep (2000)

+0

이 작업을 수행하면 전체 UI가 차단됩니다. – joe

+0

2 초 동안 스레드 dealy 시도했지만 2 초 동안 내 UI가 고정시킵니다. 내가 정말로 원하는 것은 2 초 후에 다른 줄을 하나씩 표시하는 것입니다. –

+4

이것은 끔찍한 제안입니다. 이것으로 전체 UI가 비활성화됩니다. – xxbbcc

2

당신은 간단한 타이머 (System.Windows.Forms.Timer)를 사용하고 현재의 행 인덱스를 추적 할 수 있습니다.

public partial class Form1 : Form { 
    private int index; 

    private void frmBrowser_Load(object sender, EventArgs e) { 
     index = 0; 
     timer.Interval = 2000; 
     timer.Start(); 
    } 

    private void timer1_Tick(object sender, EventArgs e) { 
     index++; 
     pictureBox1.Invalidate(); 
    } 

    private void pictureBox1_Paint(object sender, PaintEventArgs e) { 
     Pen p = new Pen(Color.Red); 
     for (int j = 1; j < index; j++) { 
      g.DrawLine(p,j*3,j*3,100,100); 
      g.DrawLine(p,j*10,j*10,100,100); 
     } 
    } 
} 

헤드에서 쓴이 부분은 테스트되지 않았습니다.

0

타이머를 사용하여 일시 중지를 추가하는 다른 답변의 제안은 정확하지만 한 줄의 그림을 천천히 표시하려면 그 이상을 수행해야합니다.

사용자가 직접 선 그리기 방법을 작성하고 선 그리기를 세그먼트로 나누고 세그먼트 사이에서 일시 중지 할 수 있습니다.

빠른 대안

은 윈폼 대신 WPF를 사용하고 있습니다 :

  • 가 같은 위치에 그것의 시작과 엔드 포인트와 캔버스에 라인을 추가합니다.
  • 원하는 위치로 이동할 애니메이션을 끝점에 추가하십시오.
  • 완료되면 다음 줄에 대해 동일한 작업을 수행하십시오.

이렇게하면 선 그리기 코드 나 타이머를 쓸 필요가 없습니다.

-2

using System.Threading;

Thread.sleep (2000);

+2

그러면 UI 스레드가 차단되어 앱이 중단 된 것처럼 보입니다. –

관련 문제