2013-12-01 3 views
-6

У меня проблема, когда я хочу прокручивать программу, зависает и ее нужно закрыть. Я думаю, проблема заключается в том, что система попадает в бесконечный цикл и сбой (из-за нехватки памяти, о которой я думаю). Вот код, где это время:Застрял в бесконечном цикле C#

string acorde; 
int ScrollPosition = this.vScrollBar1.Value; 
if (ScrollPosition < 5) 
{ 
    acorde = "A"; 
    lblnota.Text = "A/La"; 
    lblnota2.Text = "A/La"; 
    imagen.Image = Image.FromFile(@"C:\Users\Sebastian\Desktop\GuitarraFINAL\Guitarist\Imagenes\A.jpg"); 

    while(note != 1) 
    { 
     lblnote.Text = "A"; 
     lblcuerda.Text = "5° cuerda"; 
     lbltraste.Text = ""; 
     imagenok.Image = Image.FromFile(@"C:\Users\Sebastian\Desktop\GuitarraFINAL\Guitarist\Imagenes\MAL.jpg"); 
    } 
    imagenok.Image = Image.FromFile(@"C:\Users\Sebastian\Desktop\GuitarraFINAL\Guitarist\Imagenes\OK.jpg"); 
    while(note != 8) 
    { 
     lblnote.Text = "E"; 
     lblcuerda.Text = "4° cuerda"; 
     lbltraste.Text = "2° traste"; 
     imagenok.Image = Image.FromFile(@"C:\Users\Sebastian\Desktop\GuitarraFINAL\Guitarist\Imagenes\MAL.jpg"); 
    } 
    imagenok.Image = Image.FromFile(@"C:\Users\Sebastian\Desktop\GuitarraFINAL\Guitarist\Imagenes\OK.jpg"); 
    while(note != 1) 
    { 
     lblnote.Text = "A"; 
     lblcuerda.Text = "3° cuerda"; 
     lbltraste.Text = "2° traste"; 
     imagenok.Image = Image.FromFile(@"C:\Users\Sebastian\Desktop\GuitarraFINAL\Guitarist\Imagenes\MAL.jpg"); 
    } 
    imagenok.Image = Image.FromFile(@"C:\Users\Sebastian\Desktop\GuitarraFINAL\Guitarist\Imagenes\OK.jpg"); 
    while (note != 5) 
    { 
     lblnote.Text = "C#"; 
     lblcuerda.Text = "2° cuerda"; 
     lbltraste.Text = "2° traste"; 
     imagenok.Image = Image.FromFile(@"C:\Users\Sebastian\Desktop\GuitarraFINAL\Guitarist\Imagenes\MAL.jpg"); 
    } 
    imagenok.Image = Image.FromFile(@"C:\Users\Sebastian\Desktop\GuitarraFINAL\Guitarist\Imagenes\OK.jpg"); 

    while (note != 8) 
    { 
     lblnote.Text = "E"; 
     lblcuerda.Text = "1° cuerda"; 
     lbltraste.Text = ""; 
     imagenok.Image = Image.FromFile(@"C:\Users\Sebastian\Desktop\GuitarraFINAL\Guitarist\Imagenes\MAL.jpg"); 
    } 
    imagenok.Image = Image.FromFile(@"C:\Users\Sebastian\Desktop\GuitarraFINAL\Guitarist\Imagenes\OK.jpg"); 


} 
else if (ScrollPosition < 12) 
{ 
    lblnota.Text = "Am/Lam"; 
    lblnota2.Text = "Am/Lam"; 
    imagen.Image = Image.FromFile(@"C:\Users\Sebastian\Desktop\GuitarraFINAL\Guitarist\Imagenes\A#.jpg"); 

Мне очень нужна ваша помощь прямо сейчас. Спасибо.

+6

Разве вы не используете 'if' вместо всех этих' while'? –

+3

Значение 'note' никогда не изменяется, поэтому вы никогда не выйдете из циклов' while' – stuartd

+2

Попробуйте использовать ваш отладчик ... –

ответ

3

Проблема заключается в использовании вами цепей while.

while(note != 1) 

В этом тепле нет ничего, что бы изменило это состояние. Поэтому каждый раз, когда цикл идет «хорошо ... нота не равна 1?», Это условие всегда верно. Таким образом, цикл выполняется снова.

2

Конечно, вы застряли в бесконечном цикле.

Вы проверяете наличие note != 1 или других сравнений, но я не вижу note в любом из этих while петель.

Как только вы попадете в одну из этих петель, вы никогда не выйдете, поскольку note всегда будет иметь такое же значение.

следующее, что должен выглядеть ваш код.

if (ScrollPosition < 5) 
     { 
      acorde = "A"; 
      lblnota.Text = "A/La"; 
      lblnota2.Text = "A/La"; 
      imagen.Image = Image.FromFile(@"C:\Users\Sebastian\Desktop\GuitarraFINAL\Guitarist\Imagenes\A.jpg"); 

     if(note != 1) 
     { 
      lblnote.Text = "A"; 
      lblcuerda.Text = "5° cuerda"; 
      lbltraste.Text = ""; 
      imagenok.Image = Image.FromFile(@"C:\Users\Sebastian\Desktop\GuitarraFINAL\Guitarist\Imagenes\MAL.jpg"); 
     } 
     else if(note != 8) 
     { 
      lblnote.Text = "E"; 
      lblcuerda.Text = "4° cuerda"; 
      lbltraste.Text = "2° traste"; 
      imagenok.Image = Image.FromFile(@"C:\Users\Sebastian\Desktop\GuitarraFINAL\Guitarist\Imagenes\MAL.jpg"); 
     } 
     else if(note != 1) 
     { 
      lblnote.Text = "A"; 
      lblcuerda.Text = "3° cuerda"; 
      lbltraste.Text = "2° traste"; 
      imagenok.Image = Image.FromFile(@"C:\Users\Sebastian\Desktop\GuitarraFINAL\Guitarist\Imagenes\MAL.jpg"); 
     } 
     else if(note != 5) 
     { 
      lblnote.Text = "C#"; 
      lblcuerda.Text = "2° cuerda"; 
      lbltraste.Text = "2° traste"; 
      imagenok.Image = Image.FromFile(@"C:\Users\Sebastian\Desktop\GuitarraFINAL\Guitarist\Imagenes\MAL.jpg"); 
     } 
     else if(note != 8) 
     { 
      lblnote.Text = "E"; 
      lblcuerda.Text = "1° cuerda"; 
      lbltraste.Text = ""; 
      imagenok.Image = Image.FromFile(@"C:\Users\Sebastian\Desktop\GuitarraFINAL\Guitarist\Imagenes\MAL.jpg"); 
     } 
     imagenok.Image = Image.FromFile(@"C:\Users\Sebastian\Desktop\GuitarraFINAL\Guitarist\Imagenes\OK.jpg"); 
    } 
+0

Следует отметить, что здесь есть два условия '! = 1 .. только один из которых (первый) будет выполнен. –

Смежные вопросы