Pause & attente d'une touche clavier en même temps [Résolu]

Messages postés
10
Date d'inscription
mercredi 10 octobre 2012
Statut
Membre
Dernière intervention
10 octobre 2012
- - Dernière réponse : 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
Afficher la suite 

2 réponses

Meilleure réponse
Messages postés
14570
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
21 octobre 2019
136
3
Merci
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

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 188 internautes nous ont dit merci ce mois-ci

Commenter la réponse de NHenry
Messages postés
10
Date d'inscription
mercredi 10 octobre 2012
Statut
Membre
Dernière intervention
10 octobre 2012
0
Merci
Merci pour votre réponse,
je m'excuse quant à ma mauvaise utilisation du forum.
Commenter la réponse de asg63