Attente dans une boucle [Résolu]

bip98 104 Messages postés mercredi 23 avril 2003Date d'inscription 29 avril 2008 Dernière intervention - 9 févr. 2005 à 10:39 - Dernière réponse : bip98 104 Messages postés mercredi 23 avril 2003Date d'inscription 29 avril 2008 Dernière intervention
- 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
Afficher la suite 

5 réponses

Répondre au sujet
MorpionMx 3489 Messages postés lundi 16 octobre 2000Date d'inscription 30 octobre 2008 Dernière intervention - 9 févr. 2005 à 11:13
+3
Utile
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
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de MorpionMx
cs_Bidou 5507 Messages postés dimanche 4 août 2002Date d'inscription 20 juin 2013 Dernière intervention - 9 févr. 2005 à 11:18
+3
Utile
Autres exemples trouvés sur ce site expliquant le fonctionnement des Threads :

http://www.csharpfr.com/code.aspx?ID=23230
http://www.csharpfr.com/code.aspx?ID=21624
http://www.csharpfr.com/code.aspx?ID=11407

[Pub] http://www.csharpfr.com/auteurdetail.aspx?ID=13319 [\Pub]
C# forever
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de cs_Bidou
MorpionMx 3489 Messages postés lundi 16 octobre 2000Date d'inscription 30 octobre 2008 Dernière intervention - 9 févr. 2005 à 10:47
0
Utile
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
Commenter la réponse de MorpionMx
bip98 104 Messages postés mercredi 23 avril 2003Date d'inscription 29 avril 2008 Dernière intervention - 9 févr. 2005 à 10:55
0
Utile
Comment cela se fait ? je comprends pas trop..
Commenter la réponse de bip98
bip98 104 Messages postés mercredi 23 avril 2003Date d'inscription 29 avril 2008 Dernière intervention - 9 févr. 2005 à 13:08
0
Utile
Merci !! Vous êtes géniaux !
Commenter la réponse de bip98

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.