关于while+try里写ReadKey+Sleep遇到的问题
.
想实现的效果:
让用户输入整数,如果输入的字符(串)无法成功转换为整数,则提示文本1秒,1秒后玩家才能再次输入信息:反之则输出用户的整数。
.
代码文本:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Threading;
namespace test
{
internal class Program
{
static void Main(string[] args)
{
int i;
while (true)
{
Console.WriteLine("请输入属于Int32的整数:");
try
{
i = Convert.ToInt32(Console.ReadLine());
break;
}catch
{
Console.WriteLine("请再次输入");
Thread.Sleep(1000);
}
Console.Clear();
}
Console.WriteLine("你输入了" + i);
Console.ReadKey();
}
}
}
.
遇到的问题:
①输入非整数后(无法成功转换为整数的内容),提示文本时,快速多次摁下回车,随后提示文本将会不断的被触发。这样就违背了提示文本只显示1秒的效果。
②也可以直接狂摁回车,提示文本也将会不断的触发。
.
猜测的原因:
程序在Sleep的期间,获取用户键位输入并没有“停止”,而是存到了缓存中,在程序Sleep结束后一一触发。
所以程序在Sleep结束后,ReadKey函数便一一触发了缓存中的键位。
.
尝试的办法:
本人初学C#不久,又由于自己的猜测,便上网查找“清除控制台缓存”的C#代码的使用,但久久查询和尝试均未果。
.
目的简述:让程序在Sleep期间,不管用户输入若干任意键位(比如回车),在Sleep结束后,不响应在Sleep期间的键位输入。