如何在 C# 中等待控制台输入 15 秒左右
我需要在控制台中请求输入,然后等待几秒钟,可能一分钟后我需要默认为某个值。 如何基本上对 C# 中的控制台输入进行计时并继续使用默认设置? 如果您有示例代码那就太好了。
I need to ask for input in console and wait for few sec may be a min after that I need to default to some value. How can basically time our on console input in c# and proceed with default settings? If you have sample code that would be great.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
您可以使用 System.Timers.Timer 中的计时器对象并将其设置为 60 秒,启用它,如果有人在控制台中输入某些内容,则将其禁用,如果没有,则只需处理 Timer.Elapsed 事件中发生的情况。
不确定这是否是最好的方法。 我已经对此进行了测试,但正如我所说,这可能不是最好的方法。
You could use the timer object in System.Timers.Timer and set it to 60 secs, enable it and if someone enters something into the console just disable it, if not then just handle the what happens in the Timer.Elapsed event.
Not sure if this is the best way. I have tested this but as I said it may not be the best way.
您可能需要考虑执行一些操作,例如添加命令行参数以充当使用默认值的自动模式和完整用户输入模式之间的切换。
如果您对您的请求使用特定的解释,那么它就会变得非常微不足道。 在此模型中,系统会提示用户输入。 如果他们在超时后没有输入任何内容,则使用默认值。 如果他们开始输入内容,则不会使用超时。 这也解决了当他们花费很长时间输入内容时放弃并使用默认值的可用性问题。
因为我花了很长时间才意识到有更好的方法,所以这里有一些代码我只是敲起从控制台读取字符串,超时。 它还可以选择将当前时间打印到控制台。 它没有经过非常彻底的测试,因此可能存在很多错误。 回调功能使用 .NET 3.0 Action,但如果这是针对 C# 2.0,您可以将其转换为委托。
You may want to consider doing something like adding a command line argument to act as a switch between an automatic mode using defaults and the full user input mode.
If you use a specific interpretation of your request it becomes quite trivial. In this model the user is prompted for input. If they type nothing after a timeout period the default value is used. If they start typing something then no timeout is used. This also deals with the usability issue of giving up and using a default value when they're taking a long time to type something in.
Because I spend so long on it before I realised there was a better way, here is some code I just knocked up to read a string from the console, with a timeout. It also has the option to be able to print the current time left to the console. It's not tested very thoroughly, so is likely to have a lot of bugs. The callback feature uses the .NET 3.0 Action, though if this is for C# 2.0 you can just turn it into a delegate.
请参阅此处,它在控制台上使用了一种很好的小轮询技术,虽然有点粗糙,但非常有效。
See here, it uses a nice little polling technique on the console, which although a bit crude, very effective.
一种方法是循环,调用 Console.In.Peek(),等待输入或等待足够的时间。
One way would be to loop, calling Console.In.Peek(), waiting for input or for enough time to go by.