Attente dans une boucle

Résolu
bip98 Messages postés 104 Date d'inscription mercredi 23 avril 2003 Statut Membre Dernière intervention 29 avril 2008 - 9 févr. 2005 à 10:39
bip98 Messages postés 104 Date d'inscription mercredi 23 avril 2003 Statut Membre Dernière intervention 29 avril 2008 - 9 févr. 2005 à 13:08
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

MorpionMx Messages postés 3466 Date d'inscription lundi 16 octobre 2000 Statut Membre Dernière intervention 30 octobre 2008 57
9 févr. 2005 à 11:13
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
3
cs_Bidou Messages postés 5487 Date d'inscription dimanche 4 août 2002 Statut Membre Dernière intervention 20 juin 2013 61
9 févr. 2005 à 11:18
3
MorpionMx Messages postés 3466 Date d'inscription lundi 16 octobre 2000 Statut Membre Dernière intervention 30 octobre 2008 57
9 févr. 2005 à 10:47
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
0
bip98 Messages postés 104 Date d'inscription mercredi 23 avril 2003 Statut Membre Dernière intervention 29 avril 2008 1
9 févr. 2005 à 10:55
Comment cela se fait ? je comprends pas trop..
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
bip98 Messages postés 104 Date d'inscription mercredi 23 avril 2003 Statut Membre Dernière intervention 29 avril 2008 1
9 févr. 2005 à 13:08
Merci !! Vous êtes géniaux !
0
Rejoignez-nous