Desidero una funzione di lettura non bloccante dalla console.Lettura non bloccante da I/O standard in C#
risposta
var buf=new byte[2048];
var inputStream=Console.OpenStandardInput(); //dispose me when you're done
inputStream.BeginRead(buf,0,buf.Length,ar=>{
int amtRead=inputStream.EndRead(ar);
//buf has what you need. You'll need to decode it though
},null);
Non hai dimenticato il parametro count? – CodesInChaos
... Sì. Grazie! – spender
Quando verrà attivato il tuo 'EndRead'? Penso solo se arrivi alla fine dello stream, o quando il buffer è pieno, e non se sono disponibili solo pochi caratteri di input. – CodesInChaos
Richard Dutton ha una soluzione sul his blog:
while (true)
{
if (Console.KeyAvailable)
{
ConsoleKeyInfo key = Console.ReadKey(true);
switch (key.Key)
{
case ConsoleKey.F1:
Console.WriteLine("You pressed F1!");
break;
default:
break;
}
}
// Do something more useful
}
il 'ConsoleKeyInfo' contiene il campo' KeyChar' che rappresenta la rappresentazione 'char', che potrebbe essere ciò che l'OP vuole. – CodesInChaos
Ouch. Veramente? Basta girare un loop il più velocemente possibile fino a quando un tasto è disponibile? Questo è stupido. – spender
@spender Ecco perché c'è il commento // Fai qualcosa di più utile lì dentro. – CodesInChaos
Perché questa non è una vera e propria domanda? Capirei di chiuderlo come duplicato, ma come "non una vera domanda" mi sembra strano. – CodesInChaos
@Mitch Wheat: il blocco di ReadKey non è corretto? – jgauffin
@Me è necessario combinare almeno 'KeyAvailable' e' ReadKey'. E non sono ancora sicuro se questa è la cosa giusta da fare e come interagisce con input reindirizzati o chiavi morte. Quindi non è certamente una domanda banale. – CodesInChaos