调用 timer1_tick 时进度条不更改值

Progress bar not changing value when timer1_tick is invoked

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 时,我希望它说 "You died".

1秒后进入这个循环,就是不行:

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

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

正如您提到的代码执行达到 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");
            }
        }

计时器滴答一次然后停止:要使其持续滴答,请将 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
    }
}