Windows.Forms.Timer无法正常工作

时间:2014-10-30 05:22:53

标签: c# timer messagebox

我发布了一个示例代码来解码代码较大的问题。

我有一个2秒计时器--System.Windows.Forms.Timer

每2秒我将一个全局int增加1,并使用MessageBox显示其值 如果int达到4,我关闭主标志。

这是代码

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace WindowsFormsApplication1
{
    public partial class Form1 : Form
    {
        bool Play_On = false;
        int i = 0;
        public Form1()
        {
            InitializeComponent();
        }
        [STAThread]
        static void Main()
        {
            Application.Run(new Form1());
        }
        private void button1_Click(object sender, EventArgs e)
        {
            if (button1.Text == "Play")
            {
                button1.Text = "Puase";
                Play_On = true;
            }
            else
            {
                button1.Text = "Play";
                Play_On = false;
            }
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            Timer MinResTimer = new Timer();

            {
                MinResTimer.Tick += new EventHandler(MinResTimer_Elapsed);
                MinResTimer.Interval = 2000;
                MinResTimer.Enabled = true;
                MinResTimer.Start();
            }
        }
        public void MinResTimer_Elapsed(object sender, EventArgs e)
        {

            if (Play_On == true)
            {
                MessageBox.Show("timed"+ i.ToString());
                i++;
            }
            if (i == 4)
            {
                Play_On = false;
                button1.Text = "Play";

            }
        }
    }
}

问题是该标志根本没有被关闭。 我得到的输出是Timed0 - 在消息框中,很多次。 我想我的消息箱有问题 - 不确定

有人可以帮我找出最新情况吗?

3 个答案:

答案 0 :(得分:1)

在调用MessageBox

之前将i ++的增量移动到

然后,您将看到在显示消息框时,您确实希望保护事件不被触发。

所以你的新代码会将I ++移到MessageBox之前,然后在调用消息框之前和之后禁用和启用定时器。

答案 1 :(得分:0)

    void MinResTimer_Elapsed(object sender, EventArgs e)
    {
        if (Play_On == true)
        {
            i++;
            MessageBox.Show("timed" + i.ToString());
        }
        if (i == 4)
        {
            Play_On = false;
            MinResTimer.Enabled = false;
            button1.Text = "Pause";
        }
    }  

    private void button1_Click(object sender, EventArgs e)
    {
        if (button1.Text == "Play")
        {
            button1.Text = "Puase";
            MinResTimer.Enabled = true;
            i = 0;
            Play_On = true;
        }
        else
        {
            button1.Text = "Play";
            MinResTimer.Enabled = false;
            Play_On = false;
        }
    }  

编辑#1:

    bool Play_On = false;
    int i = 0;
    Timer MinResTimer;

    private void Form1_Load(object sender, EventArgs e)
    {
        MinResTimer = new Timer();

        {
            MinResTimer.Tick += new EventHandler(MinResTimer_Elapsed);
            MinResTimer.Interval = 2000;
            MinResTimer.Enabled = true;
            MinResTimer.Start();
        }
    }
    void MinResTimer_Elapsed(object sender, EventArgs e)
    {
        if (Play_On == true && i <= 4)
        {
            i++;
            MessageBox.Show("timed" + i.ToString());
        }
        if (i == 4)
        {
            Play_On = false;
            button1.Text = "Pause";
        }
    }  

    private void button1_Click(object sender, EventArgs e)
    {
        if (button1.Text == "Play")
        {
            button1.Text = "Puase";
            Play_On = true;
        }
        else
        {
            button1.Text = "Play";
            Play_On = false;
        }
    }

答案 2 :(得分:0)

当消息框显示时,您没有点击“确定”。按钮关闭消息框,i ++不能这样做。所以在你点击“确定”之前我总是等于0。消息框上的按钮。