Attente dans une boucle [Résolu]

Signaler
Messages postés
104
Date d'inscription
mercredi 23 avril 2003
Statut
Membre
Dernière intervention
29 avril 2008
-
Messages postés
104
Date d'inscription
mercredi 23 avril 2003
Statut
Membre
Dernière intervention
29 avril 2008
-
Bonjour,

Je vous explique ma situation, j'ai un moteur pas à pas.. (Donc je dois envoyer une série de bits pour qu'il tourne..) Mais pas en un coup...

Pour ca pas de problème.. si j'utilise un timer.. je le mets à 1 et Hop ca tourne...

Mais si j'utilise une boucle for il faut faire une pause.

Si j'utilise : Thread.Sleep(mSec); ça me bloque le toute.. (le prog y compris..) si par exemple en cours je veux annulé mon action c'est pas possible. Je voudrais qu'il me fasse juste une pause (comme le timer) qui bloque mon action. Est-ce possible? Ou je suis obligé utilisé un timer

5 réponses

Messages postés
3466
Date d'inscription
lundi 16 octobre 2000
Statut
Modérateur
Dernière intervention
30 octobre 2008
46
Exemple tout bete :


using
System;
using System.Threading;
using System.Windows.Forms;
namespace Class1
{


public class Class1 : Form
{


private System.Windows.Forms.Button button1;
Thread t;
public Class1()
{
InitializeComponent();
}


public void LaunchThread()
{
t = new Thread(new ThreadStart(MethodeThread));
t.Start();
}


public void MethodeThread()
{

try
{
while(true)
{
MessageBox.Show("Coucou !");
Thread.Sleep(2000);
}
}
catch(ThreadAbortException )
{

// Le thread a été arrété par l'utilisateur
}
}


private void InitializeComponent()
{


this.button1 = new System.Windows.Forms.Button();
this.SuspendLayout();


this.button1.Location = new System.Drawing.Point(88, 72);
this.button1.Name = "button1";
this.button1.Text = "Start";
this.button1.Click += new System.EventHandler(this.button1_Click);


this.AutoScaleBaseSize = new System.Drawing.Size(5, 13);
this.ClientSize = new System.Drawing.Size(292, 273);
this.Controls.Add(this.button1);
this.Name = "Class1";
this.ResumeLayout(false);
}


private void button1_Click(object sender, System.EventArgs e)
{
if(t != null && t.IsAlive)
{
t.Abort();
t = null;
}
else LaunchThread();
button1.Text = t != null ? "Stop" : "Start";
}


public static void Main()
{
Application.Run(new Class1());
}
}


}

Mx
Messages postés
5487
Date d'inscription
dimanche 4 août 2002
Statut
Modérateur
Dernière intervention
20 juin 2013
49
Messages postés
3466
Date d'inscription
lundi 16 octobre 2000
Statut
Modérateur
Dernière intervention
30 octobre 2008
46
Il faudrait que tu lances le code incriminé dans un autre Thread que celui de ta form.

Ainsi, le Thread.Sleep() ne bloquerait pas ton programme, et tu pourrais annuler l'action.

Mx
Messages postés
104
Date d'inscription
mercredi 23 avril 2003
Statut
Membre
Dernière intervention
29 avril 2008
1
Comment cela se fait ? je comprends pas trop..
Messages postés
104
Date d'inscription
mercredi 23 avril 2003
Statut
Membre
Dernière intervention
29 avril 2008
1
Merci !! Vous êtes géniaux !