2011-04-25 3 views
2

Mon code se compose de quelque chose comme ceci:boucle C# et boucle break keypress

{ 
    var comeback = Cursor.Position; 
    code goes here 
    code goes here 
    code goes here 
    code goes here 
    code goes here 
    code goes here 
    Cursor.Position = restart; 
} 

Maintenant, je souhaite que cette boucle continue jusqu'à ce que j'invoque une pression de touche pour arrêter. Ce que je ne peux pas faire, c'est d'écrire le code pour cette boucle, ou y a-t-il une autre façon de procéder?

Merci à l'avance

+1

Je ne comprends pas. Demandez-vous comment écrire une boucle infinie en C#? Essayez 'for (;;)' –

+0

Soyez spécifique: console, winform, webform ou wpf? –

+0

Oui, je souhaite que ce soit une boucle infinie, qui aura un événement de pression pour arrêter – Kyle

Répondre

-2

ONT UNE VARIABLE booléens.

comme bool flag = true; while (indicateur) { votre code; }

Lorsque la touche est enfoncée, remplacez le drapeau par false.

+0

Comment proposez-vous de vérifier la touche? – MoonKnight

1

depuis OP m'a remercié pour la première réponse, je garderai ça comme référence ci-dessous ..

envisager d'avoir un fil d'arrière-plan qui fait la boucle. Ajoutez ensuite un écouteur de clé dans votre projet (si vous avez Visual Studio, ouvrez l'onglet Propriétés et vérifiez les événements) en double-cliquant sur l'événement KeyPressed. Vous obtiendrez quelque chose comme ceci:

private bool keyPressed; 

    public MyClass() { 
     keyPressed = false; 
     Thread thread = new Thread(myLoop); 
     thread.Start(); 
    } 

    private void myLoop() { 
     while (!keyPressed) { 
      // do work 
     } 
    } 

    private void MyClass_KeyPress(object sender, KeyPressEventArgs e) { 
     keyPressed = true; 
    } 
} 

ayant un fil Tenir compte que l'écoute pour une pression de touche, puis mis un drapeau dans votre programme que vous vérifiez dans votre boucle.

par exemple Untested

bool keyPressed = false; 
...  
void KeyPressed(){ 
    Console.ReadKey(); 
    keyPressed = true; 
} 
... 
Thread t = new Thread(KeyPressed); 
t.Start(); 
... 
while (!keyPressed){ 
    // your loop goes here 
    // or you can check the value of keyPressed while you're in your loop 
    if (keyPressed){ 
     break; 
    } 
    ... 
} 
+0

Il utilise _winform_ –

+0

@Javed. ouais .. J'ai remarqué le commentaire ajouté .. Je pense à la façon de modifier ma réponse .. – Default

+0

Merci, a travaillé un régal – Kyle

6
while(!Console.KeyAvailable) 
{ 
    //do work 
} 
+3

Dernières infos ("Et c'est une winform") invalide cette réponse. – spender

+1

encore, puisque c'est une bonne façon de le faire pour des applications de console, vous obtenez un +1 de moi (d'autres personnes qui cherchent "keypress loop" pourraient être intéressées par votre réponse) – Default