.net console app smettere di rispondere quando si stampa fuori un sacco di caratteri di fila

StackOverflow https://stackoverflow.com/questions/912373

  •  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!

È stato utile?

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));
        }
    }
}
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top