我如何能够实时停止计时器c#?

时间:2017-08-06 02:44:21

标签: c# timer windows-forms-designer

我试图在实时16秒后停止计时器,但我不知道我该怎么做。

我做了这个小例子:当picturebox1与picturebox2相交时,这个动作激活一个计时器,这个计时器必须在16秒内实时显示picturebox3并在停止后(计时器)(并且图片框3没有' t show)。

(抱歉我的英文。但是西班牙语的StackOverflow没有很多信息)。

我使用的是Windows窗体和C#

    private void timer2_Tick(object sender, EventArgs e)
    {
        pictureBox7.Hide();
        if ((pictureBox3.Bounds.IntersectsWith(pictureBox2.Bounds) && pictureBox2.Visible) || (pictureBox5.Bounds.IntersectsWith(pictureBox2.Bounds) && pictureBox2.Visible))
        {                
            puntaje++;
            this.Text = "Puntaje: " + puntaje;
            if (puntaje % 5 == 0)
            {
               timer3.Enabled=true;
 //This is the part where i want set down the timer3, timer 2 is on

            }
        }

2 个答案:

答案 0 :(得分:1)

您可以在计时器刻度事件处理程序上尝试此操作。 Timespan计算两个日期之间的经过时间。在这种情况下,自16秒以来,我们将其计为负数。

private void timer1_Tick(object sender, EventArgs e)
    {
        TimeSpan ts = dtStart.Subtract(DateTime.Now);
        if (ts.TotalSeconds <= -16)
        {
            timer1.Stop();
        }
    }

确保在启动计时器时声明您的dtStart(DateTime):

timer1.Start();
dtStart = DateTime.Now;

答案 1 :(得分:0)

我能看到这种方法的最简洁方法是使用System.Timers.Timer的区间参数。

这是代码的示例代码段

var timer = new Timer(TimeSpan.FromSeconds(16).TotalMilliseconds) { AutoReset = false };
timer.Elapsed += (sender, e) =>
{
    Console.WriteLine($"Finished at exactly {timer.Interval} milliseconds");
};
_timer.Start();

TimeSpan.FromSeconds(16).TotalMilliseconds基本上转换为16000,但我使用TimeSpan静态方法让您更容易理解它,看起来更具可读性。

计时器的AutoReset属性告诉它只应触发一次。

根据您的代码调整

private void timer2_Tick(object sender, EventArgs e)
{
    pictureBox7.Hide();
    if ((pictureBox3.Bounds.IntersectsWith(pictureBox2.Bounds) && pictureBox2.Visible) 
        || (pictureBox5.Bounds.IntersectsWith(pictureBox2.Bounds) && pictureBox2.Visible))
    {                
        puntaje++;
        this.Text = "Puntaje: " + puntaje;
        if (puntaje % 5 == 0)
        {
            var timer3 = new Timer(TimeSpan.FromSeconds(16).TotalMilliseconds) { AutoReset = false };
            timer3.Elapsed += (sender, e) =>
            {
                pictureBox3.Visible = true;
            };
            timer3.Start();
        }
    }
}

如果这解决了您的问题,请标记已回答的问题。