【问题标题】:Progress bar not changing value when timer1_tick is invoked调用 timer1_tick 时进度条不改变值
【发布时间】:2015-03-11 10:43:21
【问题描述】:
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 毫秒。

例如,我希望每一秒的进度条都是“进度条值 - 1”。 当它达到 0 时,我希望它说“你死了”。

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

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

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

【问题讨论】:

  • 什么意思!!! ProgressBar 更新失败!!!?

标签: c# timer progress-bar


【解决方案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
    }
}

【讨论】:

    【解决方案2】:

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

    Timer NameSpace :确保您的计时器命名空间是 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");
                }
            }
    

    【讨论】:

      猜你喜欢
      • 2013-11-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-07-18
      • 2018-08-05
      相关资源
      最近更新 更多