2011-04-11 7 views
15

Konsoldan engellenmeyen bir okuma fonksiyonu istiyorum.Standart olmayan I/O okunduğunda okunamıyor C#

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 
} 
+5

Neden bu gerçek bir soru değildir: – CodesInChaos

+0

@Mitch Wheat: ReadKey engellemiyor mu? – jgauffin

+0

@Mitch 'KeyAvailable' ve 'ReadKey' en azından birleştirmeniz gerekiyor. Ve hala doğru olanın yapılıp yapılmadığını ve yönlendirilmiş giriş veya ölü anahtarlarla nasıl etkileşime girdiğinden emin değilim. Yani kesinlikle önemsiz bir soru değil. – CodesInChaos

cevap

5
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); 
+0

Sayım parametresini unutmadınız mı? – CodesInChaos

+0

... Evet. Teşekkürler! – spender

+0

"EndRead" iniz ne zaman tetiklenecek? Sadece akışın sonuna geldiğinizde ya da tampon dolduğunda ve sadece birkaç giriş karakterinin mevcut olup olmadığını düşünürsünüz. – CodesInChaos

38

Richard Dutton

his blog bir çözüm vardır? Bunu yinelemeli olarak kapatmayı anlıyorum, ama "gerçek bir soru değil" diye bana garip görünüyor.
+0

'ConsoleKeyInfo', OP’in istediği char char' gösterimini temsil eden' ​​KeyChar' alanını içerir. – CodesInChaos

+1

Ouch. Gerçekten mi? Bir anahtar mevcut olana kadar mümkün olduğunca çabuk bir döngü döndürün? Bu aptalca. – spender

+12

@spender İşte bu yüzden burada // /////- daha yararlı bir şeyler yap. – CodesInChaos