C#消息框在定时器中反复弹出

时间:2013-06-29 20:42:36

标签: c# messagebox

其他人和我一样有类似的问题;但他们实际上并没有得到一个有效的答案。我可以通过创建bool并在进入if语句后将其设置为false来使其工作。我在使用该方法之前已经完成了,但是,我想知道是否有更清洁的方法。

问题: 为什么当我在带有简单按钮的计时器中使用消息框时,有人必须单击“确定”;否则你每秒都得到同样的信息?在下面的代码中;它会每隔一秒弹出一次,因为这是定时器设置要做的(勾选一秒),但它应该只显示一次定时器击中10,如下面的代码所示,但定时器仍应“滴答”因为它显示在标签中。

在我有人因为某些原因注意到人们喜欢这样做之前,有人会把我撕成碎片。我的逻辑说,因为秒= 10,它应该显示一次。当秒= 11时,它显示一个额外的盒子是没有意义的,因为它是11而不是10.我想知道是什么原因造成的?

private void randomtimer_Tick(object sender, EventArgs e)
    {

        if (seconds == 10)
        {
            MessageBox.Show(this,"Why does this message display every one second over and over until someone clicks close or okay?");
        }
        seconds++;            
        if (seconds >= 60)
        {
            seconds = 0;
            minutes = minutes + 1;  
        }
        if (minutes >= 60)
        {
            minutes = 0;
            hours = hours + 1;
        }

        string niceTime = string.Format("{0:D2}h:{1:D2}m:{2:D2}s", hours, minutes, seconds); //format the time so it displays nicely
        label2.Text = "Session Length:\n" + niceTime;
    }

3 个答案:

答案 0 :(得分:3)

简单的答案是,因为在seconds之前你没有递增MessageBox.Show()。在if (seconds == 10)测试之前移动它,您的代码将起作用。

执行流程在MessageBox.Show()停止,然后另一个Time事件触发。在计时器方面,你必须始终注意重新进入。

答案 1 :(得分:0)

我会尽量解释这个问题,因为我可以忍受这一点。

当调用计时器的处理程序时,计数器不会被阻止。每秒(计时器的间隔)您提供的功能运行。现在,当您显示MessageBox时,计时器的处理程序的线程被阻止。因此,在用户单击确定并且函数恢复之前,不会运行增加秒的代码。

现在,如果用户没有按OK,则第二个将停留在10.在1秒后,计时器将再次调用处理程序,并且if将运行,因为该值仍为10。

如果您想阻止这种情况,请使用以下代码:

        if (seconds == 10)
        {
            seconds++;
            MessageBox.Show(this,"Why does this message display every one second over and over until someone clicks close or okay?");
        }
        else
            seconds++;

当然有更好的方法,但这会奏效。

答案 2 :(得分:0)

  

有人必须点击没关系;否则你每秒都得到同样的信息?

现在,那是你的问题。再看一下代码:

if (seconds == 10)
{
    MessageBox.Show(this,"Why does this message display every one second over and over until someone clicks close or okay?");
}
seconds++;

MessageBox.Show被解雇之前,秒数不会增加。将其更改为:

if (seconds == 10)
{
    seconds++;
    MessageBox.Show(this,"Why does this message display every one second over and over until someone clicks close or okay?");
}
else seconds++;

这将解决您的问题。