jaylee |
Le Framework .NET 1.1 ne permet pas de lire un seul caractère sur la console. Toutes les fonctions de lecture ne retourneront qu'après un appui sur Enter effectué par l'utilisateur.
Cependant, si tu ne veux que des lignes complètes et que tu veux asynchroniser le tout, tu peux utiliser la méthode suivante :
Code :
- class Class1
- {
- private ManualResetEvent _exitEvent = new ManualResetEvent(false);
- private byte[] _buffer = new byte[1];
- private Stream _consoleStream;
- void OnLineRead(IAsyncResult result)
- {
- int numRead = _consoleStream.EndRead(result);
- if(_buffer[0] == 'e')
- _exitEvent.Set();
- else
- _consoleStream.BeginRead(_buffer, 0, 1, new AsyncCallback(OnLineRead), null);
- }
- void Run()
- {
- _consoleStream = Console.OpenStandardInput();
- _consoleStream.BeginRead(_buffer, 0, 1, new AsyncCallback(OnLineRead), null);
- _exitEvent.WaitOne();
- }
- static void Main(string[] args)
- {
- new Class1().Run();
- }
- }
|
Le modèle de fonctionnement est assez simple. Le plus simple est d'ajouter une thread supplémentaire pour effectuer les opérations asynchrones. Tu peux notifier de l'arrivée d'une chaine par l'intermédiaire d'un event (keyword event et non pas WaitHandle), et effectuer des traitement appropriés.
En passant par la, le Framework 2.0 proposera une méthode appelée Console.ReadKey, avec la possibilité de controller l'echo local.
--
Jay
{Epitech.}
http://www.labtech.epitech.net/blogs/jaylee |