0

ユーザー名とPINの入力を求めるC#.NET3.5アプリがあります。x秒間PINが入力されない場合、アプリを自動的にリセットしたいのですが。キーがx秒以内に押された場合、タイマーは0にリセットされ、再開されます。タイマーthread.waitを使用して、これを行うためのさまざまな方法を検索して見つけましたが、私が達成しようとしていることの例であるものは見つかりませんでした。解決策には複数のスレッドを使用することが含まれると思いますが、これまでこれを行う必要がなかったため、どこから始めればよいかわかりません。

4

2 に答える 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

それがあなたがたくさん再利用しようとしている振る舞いでない限り、これはそれほど賢い必要はありません。このフォームをモーダルで表示していると仮定します

フォームが表示されたら、フォームにタイマーを設定して(無効にして)有効にします。

キーダウン/キープレスイベントハンドラーをフォーカスのあるボックスに追加し、タイマーを再起動します

タイマーイベントが発生した場合は、フォームを閉じて適切なDialogResultCancelを返します。

キーを押すとリセットされるので、別のスレッドを使用する意味はほとんどありません。あなたがリセットしていなかったなら、あなたがたくさんの車輪を再発明したいのでなければ、Mパテルの答えは行く方法です

于 2013-01-22T23:56:32.787 に答える