1

私が構築している機器を制御するこのコードがあります。メインの Sub はハードウェアにいくつかのコマンドを送信し、アクションの実行に必要な時間を常に待機します。アルゴリズムは次のようなものです。

Private Sub StartAuto()
    Send command1 to hardware and wait x seconds
    Send command2 to hardware and wait y seconds
    Send command3 to hardware and wait z seconds
    etc
End Sub

問題は、このルーチンの実行を停止ボタンで停止できるようにしたいということです。これまでのところ、すべてのコマンド間でブール値をチェックするよりも良い方法を考えたり見つけたりすることはできませんでした。これはひどいことです:

Private Sub btStopAuto_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btStopAuto.Click
    keepRunning = false
End Sub
Private Sub StartAuto()
    keepRunning = True
    Send command1 to hardware and wait x seconds
    If (keepRunning = false)
        Exit Sub
    End If
    Send command2 to hardware and wait y seconds
    If (keepRunning = false)
        Exit Sub
    End If
    Send command3 to hardware and wait z seconds
    If (keepRunning = false)
        Exit Sub
    End If
    etc
End Sub

ループを使用することを考えましWhileたが、手順全体が完了した後にのみ検証されます。

基本的に私が必要とするのは次のようなものです

Private Sub btStopAuto_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btStopAuto.Click
    StartAuto.Exit
End Sub

明らかにこれは存在しません。それを行う方法についてのアイデアはありますか? 現在、手順中に問題が発生した場合は、デバッグを中止する必要がありますが、それは開発以外では機能しません。

ありがとうございました。

4

1 に答える 1

0

別のトレッドで AutoStart() を呼び出すと、スレッドをキャンセルできます。

ブール値フラグは最良/最も簡単な方法ですが、スレッドはオプションです。

于 2013-09-19T20:00:40.150 に答える