Pause & attente d'une touche clavier en même temps

Résolu
asg63 Messages postés 10 Date d'inscription mercredi 10 octobre 2012 Statut Membre Dernière intervention 10 octobre 2012 - 15 juin 2011 à 20:20
asg63 Messages postés 10 Date d'inscription mercredi 10 octobre 2012 Statut Membre Dernière intervention 10 octobre 2012 - 16 juin 2011 à 10:18
Bonjour,

Je dois programmer un petit programme pour un enseignement.
Je dois commander un moteur pas-a-pas grace à une catre d'acquisition.

Dans mon programme, j'utilise la commande "sleep" pour faire une pause, mais ça gèle mon programme.

Ainsi, j'aimerais placer une fonction qui,pendant le temps d'attente, permettrait de de fermer le programme - voir en mieux arreter la fonction en cours - en appuyant par exemple sur la touche escape ou Enter...

Voici le code(enfin une partie) :

Private Sub balayage_bas() Handles Button2.Click
Dim total As Integer
Dim durée As Integer
Dim compteur As Integer

'Disable all controls
Button1.Enabled = False
Button2.Enabled = False
Button3.Enabled = False
Button4.Enabled = False
Button5.Enabled = False
TextBox1.Enabled = False
GroupBox3.Enabled = False
'Escape

'start
durée = 1000
SetDigitalChannel(1)
RadioButton1.Checked = True
compteur = compteur + 1
Call Form1_KeyPress()
Sleep(durée)

ClearAllDigital()
SetDigitalChannel(2)
RadioButton2.Checked = True
compteur = compteur + 1
Sleep(durée)
ClearAllDigital()
SetDigitalChannel(3)
compteur = compteur + 1
Sleep(durée)
ClearAllDigital()
SetDigitalChannel(4)
compteur = compteur + 1
Sleep(durée)
ClearAllDigital()
If compteur = 4 Or 12 Or 20 Then
Call balayage_haut()
End If
If compteur = 24 Then
ClearAllDigital()
total = (durée * 4) / 1000
MsgBox("Fin, balayage en " & total & " secondes")
End If
End Sub

Private Sub balayage_haut() Handles Button2.Click

'Disable all controls
Button1.Enabled = False
Button2.Enabled = False
Button3.Enabled = False
Button4.Enabled = False
Button5.Enabled = False
TextBox1.Enabled = False
GroupBox3.Enabled = False
TextBox1.Enabled = False

durée = 1000
SetDigitalChannel(4)
compteur = compteur + 1
Sleep(durée)
ClearAllDigital()
SetDigitalChannel(3)
compteur = compteur + 1
Sleep(durée)
ClearAllDigital()
SetDigitalChannel(2)
compteur = compteur + 1
Sleep(durée)
ClearAllDigital()
SetDigitalChannel(1)
compteur = compteur + 1
Sleep(durée)
ClearAllDigital()
If compteur = 8 Or 16 Then
Call balayage_bas()
End If

If compteur = 24 Then
ClearAllDigital()
total = (durée * 4) / 1000
MsgBox("Fin, balayage en " & total & " secondes")
End If
End Sub

Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)

Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click
Button2.Enabled = True
If IsNumeric(TextBox1.Text) = True Then
Label4.Text = "Ok"
Label4.ForeColor = Color.Green
End If

If IsNumeric(TextBox1.Text) = False Then
Label4.Text = "Erreur"
Label4.ForeColor = Color.Red
Button2.Enabled = False
End If

End Sub

Private Sub Form1_KeyPress() Handles Me.KeyPress
If Keys.Escape Then
Call Stop_stop()
End If

End Sub


Public Sub Stop_stop()
Me.Close()
End Sub

2 réponses

NHenry Messages postés 15112 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 13 avril 2024 159
15 juin 2011 à 20:48
Bonjour,

Tu code visiblement en VB.NET, donc erreur de catégorie et en plus, ça rend ton code pas très .NET.

Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
Est déclarée dans :
System.Threadding.Thread.Sleep
En plus ta déclaration est fausse, car Long en VB6=Integer en .NET

Pas besoin de Call

MsgBox est à remplacer par MessageBox.Show(...)

Pour éviter le "gèle" de ton programme, renseignes-toi sur les thread et sur le BackGroundWorker.

Pour information, si tu poste un code, merci d'utiliser la coloration syntaxique fournie sur le forum (3ième icone en partant de la droite).

Mon site
3
asg63 Messages postés 10 Date d'inscription mercredi 10 octobre 2012 Statut Membre Dernière intervention 10 octobre 2012
16 juin 2011 à 10:18
Merci pour votre réponse,
je m'excuse quant à ma mauvaise utilisation du forum.
0
Rejoignez-nous