调用timer1_tick时,进度条不会更改值

时间:2015-03-11 10:43:21

标签: c# timer progress-bar

int millisecondi = 0;

public Form1()
{
    InitializeComponent();
    player.Top = screen.Height - player.Height;
    player.BackgroundImage = Properties.Resources.stand;
    if (mario)
    {
        label1.Text = "Mario";
    }
    progressBar1.Minimum = 0;
    progressBar1.Maximum = 100;
    progressBar1.Value = 100;
}


private void timer1_Tick(object sender, EventArgs e)
{
    index++;
    //replay gif 
    millisecondi++;
    if (millisecondi == 1000)
    {
        progressBar1.Value = progressBar1.Value - 1;
        if (progressBar1.Value <= 0)
        {
            MessageBox.Show("Sei Morto");
        }
    }
}

问题在于timer1_Tick。 它会自动启用,其间隔为1毫秒。

每秒我都希望进度条为“Progressbar value - 1”。 当它达到0时,我希望它说“你死了”。

它在1秒后进入此循环,但它不起作用:

 if (millisecondi == 1000)
    {
        progressBar1.Value = progressBar1.Value - 1;

        if (progressBar1.Value <= 0)
        {
            MessageBox.Show("Sei Morto");
        }
    }

2 个答案:

答案 0 :(得分:1)

计时器滴答一次,然后停止:要使其不断打勾,请将Tick事件更改为:

private void timer1_Tick(object sender, EventArgs e)
{
    index++;
    millisecondi++;
    timer1.Stop();
    if (millisecondi == 1000)
    {
        progressBar1.Value = progressBar1.Value - 1;

        if (progressBar1.Value <= 0)
        {
            MessageBox.Show("Sei Morto");
        }
    }
    else
    {
        timer1.Start(); // will 'retick' if millisecondi != 1000
    }
}

答案 1 :(得分:0)

正如您所提到的,代码执行到达if (millisecondi == 1000),那么执行方案就不会出现任何问题,因此您应该注意以下其他事项:

计时器名称空间:确保您的计时器名称空间为 System.Windows.Forms.Timer

如果可以,那么你的代码看起来对我来说是正确的,但如果你仍然遇到这个问题,请尝试这个代码:

 index++;
        //replay gif 
        millisecondi++;

        if (millisecondi == 1000)
        {
            if (progressBar1.InvokeRequired)
            {
                progressBar1.Invoke((MethodInvoker)
                    delegate
                    {
                        progressBar1.Value = progressBar1.Value - 1;
                    }
                    );
            }
            else
            {
                progressBar1.Value = progressBar1.Value - 1;
            }
            if (progressBar1.Value <= 0)
            {
                MessageBox.Show("Sei Morto");
            }
        }