2009-05-26 13 views
2

Ich versuche herauszufinden, warum ein Programm, an dem ich arbeite, geht in "nicht reagiert" -Modus, wenn ich es eine große Anzahl von Zeichen ausgeben an die Konsole in läuft es.net Konsole App reagiert nicht mehr beim Ausdrucken von vielen Zeichen in einer Zeile

ich habe versucht, ein kleines Beispiel zu schaffen, die nur Zeichen ausdruckt, und dies in der Tat auch gehen auf mich „reagiert nicht“ nach einigen 10-20 Sekunden.

static void Main(string[] args) 
{ 
    for (int i = 0; i < 255; i = (i+1) % 255) 
    { 
     Console.Write(((char)i)); 

    } 
} 

Das Programm läuft zwar noch, obwohl das Konsolenfenster "nicht reagiert", ich kann den Debugger trotzdem pausieren und fortsetzen, aber das Konsolenfenster ist kaputt.

Die Sache ist, die Konsole nicht dagegen eine endlose Menge von ganzen Zahlen ausspuckte:

static void Main(string[] args) 
{ 
    for (int i = 0; i < 255; i = (i+1) % 255) 
    { 
     Console.Write(i);    
    } 
} 

Irgendwelche Ideen sind viel appreaciated. Vielen Dank!

Antwort

4

Nun, es wird eine Menge Unsinn ausspucken (und Piepen viel, es sei denn, Sie maskieren Charakter 7, die eine Glocke ist), aber es reagiert nie auf mich.

Es hängt davon ab, wie Ihre Konsole die Steuerzeichen beherrscht - welche Konsole benutzen Sie, auf welchem ​​Betriebssystem und in welcher Sprache?

Darüber hinaus möchten Sie senden nicht druckbare Zeichen an die Konsole? Wenn Sie Ihre Schleife auf ASCII (32-126) halten, was passiert? Zum Beispiel:

using System; 

class Test 
{ 
    static void Main(string[] args) 
    { 
     int i=32; 
     while (true) 
     { 
      Console.Write((char)i); 
      i++; 
      if (i == 127) 
      { 
       i = 32; 
      } 
     } 
    } 
} 

Zeigt das immer noch das gleiche Verhalten?

Sie erwähnen den Debugger - erhalten Sie das gleiche Verhalten, wenn Sie außerhalb des Debuggers laufen? (Ich habe nur über die Befehlszeile bisher getestet.)

+1

Versucht es sowohl in und aus Visual Studio, Windows 7 (uns, mit dänischen als regional), von der regulären cmd.exe Konsole. Ihr Beispiel funktioniert jedoch gut, und nach der Änderung von 0-255, aber ohne 7, druckt meine Konsole weiterhin Zeichen ohne Probleme. Also ich denke, es ist der Piepton, der es tötet. Danke für die Eingabe. –

5

Wenn Sie es in ein Zeichen umwandeln, senden Sie auch Steuerzeichen für einige niedrigere Werte von i an die Konsole. Ich nehme an, es hat etwas damit zu tun, einige dieser Steuerzeichen wiederholt auszugeben.

1

Nebenbei bemerkt, Sie i<255 weglassen und einfach schreiben: for (int i = 0; ;i = (i+1) % 255)

oder mit Jon Antwort gehen Sie, dass wie diese

vereinfachen
using System; 

class Test 
{ 
    static void Main(string[] args) 
    { 

     for(var i=0;;i=(i+1) % 126) 
     { 
      Console.Write((char)(i+32)); 
     } 
    } 
} 
Verwandte Themen