【问题标题】:Can I use a while for control time like this?我可以像这样使用一段时间来控制时间吗?
【发布时间】:2019-10-28 01:38:44
【问题描述】:

我需要一个计时器来在一段时间内通过控制台读取数据。我认为这是正确的,但似乎不是。请帮忙?

while ((DateTime.Now - initTime).Seconds <= limitTime)
{
    Console.ReadLine();
}

【问题讨论】:

    标签: c# datetime


    【解决方案1】:

    你可以试试这个:

    var timeLimit = new TimeSpan(0, 0, 15); // 15 sec
    var dateStart = DateTime.Now;
    var inputs = new List<string>();
    
    while ( DateTime.Now - dateStart <= timeLimit )
      inputs.Add(Console.ReadLine());
    

    我们使用TimeSpan 来设置允许的时间。

    由于两个日期的减法是TimeSpan,我们将其与允许的时间进行比较,同时将输入字符串添加到列表中。

    为示例添加列表,您可以管理循环内或循环外的输入。

    【讨论】:

    • 非常感谢!但似乎它也不起作用,readline会停止一切,即使用户没有在控制台中输入任何内容并且在时间到了时退出,我也需要时间运行,而不是按回车键:(也许我需要一个线程......对不起我的英语,我来自西班牙...... :)
    • 确实,即使时间结束,控制台也会在最后一次调用的 readline 上被阻止,但在用户按下回车后它会停止。要拥有一个良好的输入系统,您可以通过捕获所有键并管理它们(例如字母、数字、箭头、退格、删除、回车等)来实现手工制作的控制台读取行替换......所以这可以完全停止暂停。我不知道使用线程是否可以帮助解决这个问题,你可以尝试一下,当时间到了你就杀死线程。
    • 这可能会对您有所帮助:How to create a custom command line user input method。您可以将 ReadKey 替换为 Read() 并管理 int 结果以实时控制循环。
    【解决方案2】:

    我知道了,这是有人需要的功能。感谢奥利弗的帮助!

     public static List<string> answerRange(byte maxTime)
            {
                TimeSpan maxT = new TimeSpan(0, 0, maxTime);
                DateTime initTime = DateTime.Now;
                List<string> userAnswers = new List<string>();
                while ((DateTime.Now - initTime) <= maxT)
                {
                    if (Console.KeyAvailable)
                    {
                        ConsoleKey key = Console.ReadKey().Key;
                        if (key == ConsoleKey.Enter)
                        {
                            break;
                        }
                        else
                        {
                            userAnswers.Add(key.ToString());
                        }
    
                    }
                }
    
    
                return userAnswers;
            }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-01-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-10-04
      • 1970-01-01
      相关资源
      最近更新 更多