.net console app smettere di rispondere quando si stampa fuori un sacco di caratteri di fila
-
06-09-2019 - |
Domanda
Sto cercando di capire perché un programma di cui sto lavorando va in a "non risponde" modalità quando lo chiedo per produrre una grande quantità di caratteri per la console è in esecuzione in.
Ho cercato di creare un piccolo esempio che stampa appena fuori personaggi, e questo sarà davvero anche andare "non risponde" su di me dopo qualche 10-20 secondi:
static void Main(string[] args)
{
for (int i = 0; i < 255; i = (i+1) % 255)
{
Console.Write(((char)i));
}
}
Il programma è ancora in corso, però, anche se la finestra della console è "non risponde", posso ancora mettere in pausa il debugger e continuare, ma la finestra della console è rotto.
Il fatto è che la console non mente sputando una quantità infinita di numeri interi:
static void Main(string[] args)
{
for (int i = 0; i < 255; i = (i+1) % 255)
{
Console.Write(i);
}
}
Tutte le idee sono molto appreaciated. Grazie!
Soluzione
Bene sarà vomitare un sacco di sciocchezze (e un segnale acustico molto, a meno che non mascherare il carattere 7, che è una campana), ma non è mai non risponde per me.
E 'dipenderà da come la console gestisce i caratteri di controllo anche se - quale console stai usando, su cui il sistema operativo e con quale lingua
?Inoltre, perché si vogliono per inviare i caratteri non stampabili alla console? Se si mantiene il ciclo di ASCII (32-126) cosa succede? Ad esempio:
using System;
class Test
{
static void Main(string[] args)
{
int i=32;
while (true)
{
Console.Write((char)i);
i++;
if (i == 127)
{
i = 32;
}
}
}
}
Fa che ancora presentano lo stesso comportamento?
Lei parla il debugger - si ottiene lo stesso comportamento se si esegue fuori del debugger? (Ho provato solo dalla riga di comando finora.)
Altri suggerimenti
Quando lanci ad un personaggio, si sta anche inviando i caratteri di controllo alla console per alcuni valori più bassi di i
. Direi è ha qualcosa a che fare con l'output di alcuni di quei caratteri di controllo più volte.
Proprio come un a parte, è possibile omettere i<255
e semplicemente scrivere:
for (int i = 0; ;i = (i+1) % 255 )
o di andare con la risposta di Jon è possibile semplificare che, come questo
using System;
class Test
{
static void Main(string[] args)
{
for(var i=0;;i=(i+1) % 126)
{
Console.Write((char)(i+32));
}
}
}