在c#visual studios表单应用程序中延迟计时器停止

时间:2013-12-09 08:10:14

标签: c# winforms

在视觉工作室c#windows窗体应用程序中,我有一个计时器,希望它在一次移动后停止但不能马上就可以在timer.stop()中放入5秒的延迟;如果可能的话,如果不是类似的东西。

private void timer1_Tick(object sender, EventArgs e)
{
      pictureBox1.Top -= 1;
      timer1.Stop();           
}

3 个答案:

答案 0 :(得分:0)

您可以使用计数器指定何时停止计时器:如果您的计时器延迟为50毫秒并且您希望“延迟”为5秒,则使用例如100初始化计数器。然后使用

private void timer1_Tick(object sender, EventArgs e)
{
      pictureBox1.Top -= 1;
      counter--;
      if (counter==0)
         timer1.Stop();           
}

答案 1 :(得分:0)

您可以使用其他计时器类:System.Timers.Timer

在5秒内初始化那个,处理Elapsed事件,以便停止第一个计时器。 一定要让它的线程安全! Thread-Safe Calls to a Windows Forms Control

答案 2 :(得分:0)

我是这样做的,我不认为使用计时器是最好的选择,但是要满足你的需求。

    Thread runner;
    private void button1_Click(object sender, EventArgs e)
    {
        timer1.Start();
        timer1.Interval = 1000;
        textBox1.Text = "Amazing"; // initial process
    }

    private void timer1_Tick(object sender, EventArgs e)
    {
        if (runner != null && runner.IsAlive)
            return;

        runner = new Thread(new ThreadStart(() =>
        {
            // run your process here
            Thread.Sleep(5000);
            StopRunner();
        }));
        runner.Start();
    }

    private void StopRunner()
    {
        timer1.Stop();
        // post process here
    }

它的作用是处理你的实际请求,然后它会退出计时器。我检查了线程是否存活,因此它不会重新处理它。