私のプロジェクトでは、メインフォームがあります。そのメインフォームで、実行時にユーザーコントロールを呼び出しています。このように実行されるイベントのシーケンス。
バーコードをスキャンします-このコードでいくつかのプロセスを実行します
ユーザーに「もっとスキャンしますか?」と尋ねます。次に、「はい/いいえ」オプションを表示します。これはポップアップウィンドウではありません。キオスク用のタッチスクリーンコンピュータの画面上のメッセージを更新する必要があります。
ユーザー入力をしばらく待ちます。
ユーザーが「はい」をクリックした場合は、他のバーコードを受け入れます。
ユーザーが「いいえ」をクリックした場合は、さらに処理を行います。
ユーザーがタイムリーに返信しない場合は、「いいえ」の返信と同様にさらに処理を行います。
質問:
スレッドの間にボタンを表示するにはどうすればよいですか?
ユーザーからの返信の場合のボタンクリックイベントの処理方法。
void ShowMoreVoucherOption(bool showhide) { if (this.btnYes.InvokeRequired) { this.BeginInvoke((MethodInvoker)(() => btnYes.Visible = showhide)); this.BeginInvoke((MethodInvoker)(() => btnNo.Visible = showhide)); } else { btnYes.Visible = true; btnNo.Visible = true; } Application.DoEvents(); }
私はこのルーチンを以下のスレッドの間に呼び出しています。これはUIスレッドではありません。
UpdateProgessLabel("Would you like to add more vouchers?");
ShowMoreVoucherOption(true);
Thread.Sleep(15000);
Dofuthrerporcessing(); // in case user does not give input
ここで、15秒間待ちます。ユーザーが入力した場合はボタンクリックイベントを続行し、そうでない場合はここで続行します。
ここでThread.sleepが適切かどうかはわかりません。または、ManualResetEventとwaitoneを使用する必要がありますか?そこのボタンクリックを処理する方法は?