2015-03-11 6 views
-2
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"); 
     } 
    } 
} 

Проблема в таймере1_Tick. Включено автоматически, и его интервал составляет 1 миллисекунду.Индикатор выполнения не изменяется при срабатывании таймера1_tick

Каждую секунду я хочу, чтобы индикатор выполнения был, например, «Progressbar value - 1». Когда он достигнет 0, я хочу сказать «Ты умер».

Он входит в этот цикл через 1 секунду, но это просто не работает:

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

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

Что значит !!! Ошибка ProgressBar не работает !!!? – saeed

ответ

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 
    } 
} 
0

Как вы отметили, что выполнение кода достигает if (millisecondi == 1000) тогда не будет никаких проблем со сценарием выполнения так что вы должны заботиться о других вещах, как следующее:

таймер 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"); 
      } 
     }