如何延迟绘制线条?

时间:2013-06-14 05:20:39

标签: c# winforms graphics

如何在图片框中绘制线条时添加时间延迟?我正在使用C#,visual studio 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);
}

4 个答案:

答案 0 :(得分:2)

在绘图表格上使用计时器。当您准备好绘制时,启用计时器并开始跟踪您需要绘制的各种线条(例如,在列表/数组中)。每次定时器在定时器的回调函数中触发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.
    }
}

答案 1 :(得分: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);
         }
    }
}

从头开始写这个,它没有经过测试。

答案 2 :(得分:0)

其他答案中使用计时器添加暂停的建议是正确的,但如果您想要慢慢显示单行的绘制,则需要做更多的事情。

您可以编写自己的线条绘制方法,并将线条的绘图分割成段,并在各段之间暂停。

快速替代方案是使用WPF而不是WinForms:

  • 将行添加到Canvas,其开头和端点位于同一位置。
  • 向端点添加动画,将其移动到所需位置
  • 完成后,为下一行做同样的事情。

这样您就不必编写线条图代码,也不必编写计时器。

答案 3 :(得分:-2)

使用System.Threading;

的Thread.sleep(2000);