我有一个提示输入用户名和 PIN 的 C# .NET 3.5 应用程序。如果在 x 秒内没有输入 PIN,我希望应用程序自动重置。如果在 x 秒内按下某个键,则计时器应重置为 0 并重新开始。我四处搜索并找到了各种方法来执行此操作,使用计时器thread.wait,但我还没有找到我正在尝试完成的示例。我认为解决方案将涉及使用多个线程,但我以前从未这样做过,所以我不确定从哪里开始。
问问题
387 次
2 回答
1
您可以使用此处的示例,该示例使用 IAsyncResult 接口和 Action 来执行此操作。我自己也用过它,它就像一个魅力。为了简化事情,只需使用它,如下例所示
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
}
于 2013-01-22T23:25:58.747 回答
1
不需要那么聪明,除非它是你要重用很多的行为。假设您以模态方式显示此表单
当显示表单时,在表单上放置一个计时器(禁用)启用。
将 keydown/keypress 事件处理程序添加到可能具有焦点的框中重新启动计时器
如果计时器事件触发关闭,则返回合适的 DialogResult Cancel 的表单应该这样做。
看到您在按键上重置时,再有一个线程没什么意义。如果您不重置,那么 M Patel 的答案就是要走的路,除非您想重新发明很多轮子
于 2013-01-22T23:56:32.787 回答