Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/298.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Console.ReadKey取消_C#_Readkey - Fatal编程技术网

C# Console.ReadKey取消

C# Console.ReadKey取消,c#,readkey,C#,Readkey,可能重复: 如果我有一个Console.ReadKey(),它会使整个程序陷入困境,我如何使它能够读取一个键1秒,如果没有读取一个键,则会设置其他内容。你的意思是这样的吗 Console.WriteLine("Waiting for input for 10 seconds..."); DateTime start = DateTime.Now; bool gotKey = false; while ((DateTime.Now - start).Tota

可能重复:


如果我有一个Console.ReadKey(),它会使整个程序陷入困境,我如何使它能够读取一个键1秒,如果没有读取一个键,则会设置其他内容。

你的意思是这样的吗

    Console.WriteLine("Waiting for input for 10 seconds...");

    DateTime start = DateTime.Now;

    bool gotKey = false;

    while ((DateTime.Now - start).TotalSeconds < 10)                
    {
        if (Console.KeyAvailable)
        {
            gotKey = true;
            break;
        }            
    }

    if (gotKey)
    {
        string s = Console.ReadLine();
    }
    else
        Console.WriteLine("Timed out");
Console.WriteLine(“等待输入10秒…”);
DateTime start=DateTime.Now;
bool-gotKey=false;
while((DateTime.Now-start).TotalSeconds<10)
{
如果(控制台键可用)
{
gotKey=true;
打破
}            
}
如果(gotKey)
{
字符串s=Console.ReadLine();
}
其他的
控制台写入线(“超时”);

控制台有一个属性
键可用
。但您所需的功能(超时)不可用。您可以编写自己的函数

private static ConsoleKeyInfo WaitForKey(int ms)
{
    int delay = 0;
    while (delay < ms) {
        if (Console.KeyAvailable) {
            return Console.ReadKey();
        }
        Thread.Sleep(50);
        delay += 50;
    }
    return new ConsoleKeyInfo((char)0, (ConsoleKey)0, false, false, false);
}


你一次只能问一个问题。请选择一个。正如前面提到的,你一次只需要问一个问题,除非它们是同一个问题的两部分。这些都不是。你应该编辑你的问题以删除其中一个问题并重命名标题。类似于我只是c#中的乞丐,因此你给我的链接中给那个家伙的代码对我来说没有意义。是否只有一个简单的代码会等待一段时间后使Console.ReadKey命令取消?@user1823701即使您是初学者,您也应该学习如何正确操作。如果您不了解代码的某些方面,请在msdn和其他网站上搜索文档和示例。这是学习的唯一方法。好吧,这就是它的作用,介意解释一下它是如何工作的吗?补充说明。(对不起,我认为这很明显)。Console.KeyAvailable是如何工作的?最后的长线意味着什么(这是什么?false,false,false?)?添加了更多的解释。我弄乱了控制台。KeyAvailable,我如何重置它以使其永远不为真?任务从未处理,我认为这会导致线程池线程无法使用。。。
if (WaitForKey(1000).KeyChar == (char)0) {
    // The function timed out
} else {
    // The user pressed a key
}
static ConsoleKeyInfo? MyReadKey()
{
    var task = Task.Run(() => Console.ReadKey(true));
    bool read = task.Wait(1000);
    if (read) return task.Result;
    return null;
}
var key = MyReadKey();
if (key == null)
{
    Console.WriteLine("NULL");
}
else
{
    Console.WriteLine(key.Value.Key);
}