Ich will eine Schleife vom Benutzer unterbrechen lassen. DoEvents nimmt zu viel zeit in Anspruch (es dauert länger als die Schleife selber dauern soll).
Die Schleife soll 100 ms lang dauern, das DoEvents dauert aber manchmal mehr als 100.
Das Hauptprogramm allein braucht nur etwa 15 ms.
Der Code mit DoEvents hat so ausgesehen:
Ich habe noch mit GetAsyncKeyState versucht:
Das funktioniert insofern, dass die Schleife tatsächlich mit ESC unterbrochen wird und es auch keine Zeitverzögerung gibt wie mit DoEvents.
Allerdings wird sie auch nicht mehr ganz richtig ausgeführt, und zwar friert ein Videobild, das innerhalb der Schleife ausgelesen wird, ein (nicht nur die Anzeige, sondern auch eine Kantensuche in diesem Bild, liefert die ganze Schleife durch den selben Wert).
Gibt es noch eine andere Möglichkeit, eine Schleife zu unterbrechen, am besten mit einem Button?
Die Schleife soll 100 ms lang dauern, das DoEvents dauert aber manchmal mehr als 100.
Das Hauptprogramm allein braucht nur etwa 15 ms.
Der Code mit DoEvents hat so ausgesehen:
VB.NET-Quellcode
- Private Sub btnStart_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnStart.Click
- For t = 1 To 2147483640
- If stopGeklickt = False Then
- Application.DoEvents()
- 'HAUPTPROGRAMM
- ElseIf stopGeklickt = True Then
- Exit For
- End If
- Next t
- End Sub
- Private Sub btnStop_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnStop.Click
- stopGeklickt = True
- End Sub
Ich habe noch mit GetAsyncKeyState versucht:
VB.NET-Quellcode
- Private Declare Function GetAsyncKeyState Lib "user32.dll" (ByVal nVirtKey As Integer) As Short
- Private Const VK_ESCAPE As Long = &H1B& 'ESC-Taste
- Private Sub btnStart_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnStart.Click
- For t = 1 To 2147483640
- Taste = GetAsyncKeyState(VK_ESCAPE)
- If CBool(Taste And &H1) Then
- MsgBox("Messvorgang abgebrochen")
- Exit For
- End If
- 'HAUPTPROGRAMM
- Next t
- End Sub
Das funktioniert insofern, dass die Schleife tatsächlich mit ESC unterbrochen wird und es auch keine Zeitverzögerung gibt wie mit DoEvents.
Allerdings wird sie auch nicht mehr ganz richtig ausgeführt, und zwar friert ein Videobild, das innerhalb der Schleife ausgelesen wird, ein (nicht nur die Anzeige, sondern auch eine Kantensuche in diesem Bild, liefert die ganze Schleife durch den selben Wert).
Gibt es noch eine andere Möglichkeit, eine Schleife zu unterbrechen, am besten mit einem Button?