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