Éviter qu'une thread perde la main

narfight Messages postés 129 Date d'inscription lundi 17 mars 2003 Statut Membre Dernière intervention 4 mars 2010 - 24 janv. 2008 à 15:24
nhervagault Messages postés 6063 Date d'inscription dimanche 13 avril 2003 Statut Membre Dernière intervention 15 juillet 2011 - 24 janv. 2008 à 23:38
Bonjour,

Je voudrais savoir comment signaler qu'une partie de mon code exécuté dans une thread soit éxécuté en 1 seul fois et donc que le thread ne perde pas la main pendant ces quelques lignes de code.

Merci d'avance et désolé si je me suis trompé de forum

2 réponses

Nikoui Messages postés 794 Date d'inscription vendredi 24 septembre 2004 Statut Membre Dernière intervention 19 août 2008 13
24 janv. 2008 à 15:30
A part assigner à ton thread la plus haute priorité, je ne pense pas que tu puisses faire plus... (et je ne pense pas non plus que cela te garantisse que ton thread ne sera pas interrompu).

Par contre, pourquoi as tu ce besoin ?
Si la question est de savoir comment empêcher n'importe quel autre processus (y compris les process systems) de prendre la main, je ne vois pas d'autre solution. Si maintenant tu as simplement besoin d'être sur que ton application, aucun autre des tes threads ne viendra interrompre le premier, alors tu as des solutions supplémentaires (comme l'utilisation de mutex).


Working as designed
www.nikoui.fr
0
nhervagault Messages postés 6063 Date d'inscription dimanche 13 avril 2003 Statut Membre Dernière intervention 15 juillet 2011 37
24 janv. 2008 à 23:38
Salut

Je pense que cet exemple résout ton problème extrait en windows form
 je ne vois pas trop ce que tu veux avec le pour une fois
 mais cet exemple arrete le traitement de la methode courante et attend la fin du thread pour reprendre son travail

1 bouton et 1 label

  public Form1()
        {
            InitializeComponent();
            label1.BackColor = Color.Red;
        }

        private void button1_Click(object sender, EventArgs e)
        {
          
            Thread t = new Thread(Go);          
            t.Start();
            label1.BackColor = Color.Yellow;
            t.Join(); // attend la fin du traitement 3 sec
            label1.BackColor = Color.Blue;
        }

        public static void Go()
        {
            Thread.Sleep(3000);
           
        }
0
Rejoignez-nous