控制台.KeyAvailable -我如何重置这个布尔值
本文关键字:布尔值 何重置 KeyAvailable 控制台 | 更新日期: 2023-09-27 18:06:44
这里使用c#。我正在创建一个控制台应用程序。我有两个方法来滚动文本,而不是立即显示在屏幕上。一个工作原理与Console.Write()相同,另一个工作原理与Console.WriteLine()相似。不同之处在于每个字符之间有30毫秒的延迟。我试图使它,当你按下一个键,它加速到每个字符之间的5毫秒的延迟。问题是,一旦你按了一个键,控制台。KeyAvailable为true,不会重置,因此它只会延迟5ms。有没有办法把这个设回false,或者我能做些什么来完成这个?下面是我的代码:
//Console.Write() version
static void RPGWrite(string write)
{
char[] writearray = write.ToCharArray();
int writearraycount = writearray.Count();
for (int x = 0; x < writearraycount; x++)
{
Console.Write(Convert.ToString(writearray[x]));
if (Console.KeyAvailable == false)
System.Threading.Thread.Sleep(30);
else
System.Threading.Thread.Sleep(5);
}
}
//Console.WriteLine() version
static void RPGWriteLine(string write)
{
char[] writearray = write.ToCharArray();
int writearraycount = writearray.Count();
for (int x = 0; x < writearraycount; x++)
{
Console.Write(Convert.ToString(writearray[x]));
if (Console.KeyAvailable == false)
System.Threading.Thread.Sleep(30);
else
System.Threading.Thread.Sleep(5);
}
Console.Write("'n");
}
[nkvu -将条目从评论移到这里,以防对其他人有所帮助]
AFAIK,将KeyAvailable
设置回false实际上是需要从流中读取密钥(例如通过使用Console.ReadKey
)。
使用Console.ReadKey(true)
将从流中读取一个字符,而不会回显到控制台供用户查看-尽管请注意MSDN文档中关于Alt, Ctrl或Shift键按下的注释。
这是最终为我工作的代码:
//Console.Write() version
static void RPGWrite(string write)
{
char[] writearray = write.ToCharArray();
int writearraycount = writearray.Count();
for (int x = 0; x < writearraycount; x++)
{
if (Console.KeyAvailable == false)
{
Console.Write(Convert.ToString(writearray[x]));
System.Threading.Thread.Sleep(30);
}
else
{
Console.Write(Convert.ToString(writearray[x]));
if (x < (writearraycount - 1))
{
x++;
Console.Write(Convert.ToString(writearray[x]));
}
if (x < (writearraycount - 2))
{
x++;
Console.Write(Convert.ToString(writearray[x]));
}
if (x < (writearraycount - 3))
{
x++;
Console.Write(Convert.ToString(writearray[x]));
}
if (x < (writearraycount - 4))
{
x++;
Console.Write(Convert.ToString(writearray[x]));
}
Console.ReadKey(true);
}
}
}
//Console.WriteLine() version
static void RPGWriteLine(string write)
{
char[] writearray = write.ToCharArray();
int writearraycount = writearray.Count();
for (int x = 0; x < writearraycount; x++)
{
if (Console.KeyAvailable == false)
{
Console.Write(Convert.ToString(writearray[x]));
System.Threading.Thread.Sleep(30);
}
else
{
Console.Write(Convert.ToString(writearray[x]));
if (x < (writearraycount - 1))
{
x++;
Console.Write(Convert.ToString(writearray[x]));
}
if (x < (writearraycount - 2))
{
x++;
Console.Write(Convert.ToString(writearray[x]));
}
if (x < (writearraycount - 3))
{
x++;
Console.Write(Convert.ToString(writearray[x]));
}
if (x < (writearraycount - 4))
{
x++;
Console.Write(Convert.ToString(writearray[x]));
}
Console.ReadKey(true);
}
}
Console.Write("'n");
}