ユーザーが入力した値に基づいて特定のサイクル数(1〜576)をループするWhileループを使用しています。ユーザーが「スタート」ボタンをクリックすると起動しますが、「Escape」キーを使用してキャンセルできるようにしたいと考えています。Whileループを途中でキャンセルする
しかし、ループが行われているときに、プログラムがキーを押さないようにすることはできません。
Private Sub OnGlobalKeyDown(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles kh.KeyDown
lblInput.Text = String.Format("'{0}' Code:{1}", e.KeyCode, CInt(e.KeyCode).ToString())
If e.KeyCode = CType(27, Keys) Then
count = 0
loops = 0
End If
End Sub
私のループは
Private Sub RUNLOOP()
While loops >= 1
' my code that runs in the loop
loop = loop - 1
End While
End Sub
ループは私のキー押下が登録していない実行している間は、そうでない場合は罰金登録します。あなたのループの場所インサイド
これは.NETでは悪い考えです。 BackGroundWorkerクラスがとても使いやすく、リエントラント問題につながる可能性があるときには、この操作を行う必要はありません。 –
.NETでの従来の設計手法はこれを悪い考え方にしていますが、この質問の文脈では、正解です。代替案は、彼のアプリケーションの完全な再設計で彼を助けることです。あなたはそれをボランティアしたいですか? –
私は、BackGroundWorkerを追加して単一のメソッドをリファクタリングすることで、 "(完全な)アプリケーションの再設計"を構成することを知らなかった。 OPはUIを生かし続ける方法を尋ねましたが、これは悪い(怠惰な)解決策です。 –