我必須按兩次按鈕才能使此代碼在控制檯上顯示按下的按鈕。任何想法這個代碼有什麼問題?C#爲什麼Console.ReadKey需要兩次擊鍵才能在這段代碼中工作?
我試圖跟蹤和調試代碼,但是當我按下某個鍵時,讀寫中斷點並不總是在while循環中觸發。
using System;
using System.IO;
namespace ConsoleApplication3
{
public class Program
{
private interface IReader
{
ReadResult Read();
}
private interface IWriter
{
void Write(char character);
}
public class ConsoleWriter : IWriter
{
public void Write(char character)
{
Console.Write(character);
}
}
public class FileWriter : IWriter, IDispose
{
private readonly StreamWriter _streamWriter;
public FileWriter(StreamWriter streamWriter)
{
_streamWriter = streamWriter;
}
public void Write(char character)
{
_streamWriter.Write(character);
}
public void Dispose()
{
_streamWriter.Dispose();
}
}
public class ConsoleRead : IReader
{
public ReadResult Read()
{
return new ReadResult(Console.ReadKey(true).KeyChar, Console.ReadKey(true).Key == ConsoleKey.Escape);
}
}
private static void Main(string[] args)
{
IReader reader = new ConsoleRead();
IWriter writer = new ConsoleWriter();
Copy(reader, writer);
}
private static void Copy(IReader MyReader, IWriter MyWriter)
{
while (true)
{
var readResult = MyReader.Read();
if (readResult._shouldQuit)
break;
MyWriter.Write(readResult._readCharacter);
}
}
public interface IDispose
{
void Dispose();
}
public class ReadResult
{
public readonly char _readCharacter;
public readonly bool _shouldQuit;
public ReadResult(char ReadCharacter, bool ShouldQuit)
{
_readCharacter = ReadCharacter;
_shouldQuit = ShouldQuit;
}
}
}
}
非常感謝您的澄清 – user3726459