1

如何在图片框中画线时添加时间延迟?我正在使用 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

4 回答 4

3

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

您可以使用简单的 Timer ( 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);
         }
    }
}

这是从头写的,它没有经过测试。

于 2013-06-14T05:33:08.647 回答
0

其他答案中通过使用计时器添加暂停的建议是正确的,但如果您希望单条线的绘制也缓慢显示,您需要做更多的事情。

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

一个快速的替代方法是使用 WPF 而不是 WinForms:

  • 将线添加到画布,其起点和终点在同一位置。
  • 向端点添加动画,将其移动到所需位置
  • 完成后,对下一行执行相同的操作。

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

于 2013-06-14T06:07:10.763 回答
-3

使用 System.Threading;

线程.sleep(2000);

于 2014-01-25T04:47:57.487 回答