设置等待用户输入的超时

时间:2013-01-22 23:22:36

标签: c# winforms .net-3.5

我有一个C#.NET 3.5应用程序,提示输入用户名和PIN。如果x秒没有输入PIN,我希望应用程序自动重置。如果在x秒内按下某个键,则计时器应重置为0并重新开始。我已经四处搜索并找到了各种方法,使用计时器,thread.wait,但我还没有找到一些东西,这是我想要完成的一个例子。我认为解决方案将涉及使用多个线程,但我从来没有必要这样做,所以我不知道从哪里开始。

2 个答案:

答案 0 :(得分:1)

您可以使用使用IAsyncResult接口和Action的示例here来执行此操作。我自己也曾经使用它,它就像一个魅力。为了简化操作,只需使用它,如下例所示

Action wrappedAction = () =>
{
    // show your input
};

IAsyncResult result = wrappedAction.BeginInvoke(null, null);

if (result.AsyncWaitHandle.WaitOne(timeoutMilliseconds))
{
    /// the user supplied an input and closed the form
    wrappedAction.EndInvoke(result);
}
else
{
    // the code has timed out so close your input and throw error
}

答案 1 :(得分:1)

不需要那么聪明,除非这是一种你要重复使用的行为。 假设您以模态方式显示此表单

在表单上放一个计时器(已禁用) 在显示表单时启用。

将keydown / keypress事件处理程序添加到可能具有焦点的框中 在他们中重启计时器

如果计时器事件触发关闭表单,则返回一个合适的DialogResult取消应该这样做。

当你在按键上重置时,看到另一个线程没什么意义。如果你没有重置那么M Patel的答案是要走的路,除非你想重新发明很多轮子