begin process at 2012 02 09 00:03:53
  Trouver un code source :
 
dans
 
Accueil > Forum > 

C#

 > 

Windows

 > 

Formulaire / Winforms / Controls

 > 

Forms en série...


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

Forms en série...

vendredi 7 juillet 2006 à 16:43:22 | Forms en série...

immerczeck

Bonjour!
Pourriez-vous m'aider à trouver l'erreur dans ce code, à chaque fois que je clique sur le button1, une fenêtre apparaît, mais elle reste bloquée...

using System;
using System.Collections;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Threading;

namespace test
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        ArrayList c1 = new ArrayList();
        bool a = false;
   

        private void Form1_Load(object sender, EventArgs e)
        {
            Thread t1 = new Thread(new ThreadStart(funct));
            t1.Start();
        }

      private void button1_Click(object sender, EventArgs e)
        {
            a = true;
        }

        private void funct()
        {
            for (; ; )
            {
                {
                    if (a == true)
                    {

                        c1.Add(new Conversation("corr", "orig"));
                        a = false;
                    }
                }
            }
        }

        public class Conversation
        {
            public Form2 fenetre;
            public string corres;
            public string origin;
            public Conversation(string corr, string orig) { corres = corr; origin = orig; fenetre = new Form2(); fenetre.Show(); fenetre.Activate(); }
            public void Activate() { fenetre.Show(); fenetre.Activate(); }
        }
    }
}
vendredi 7 juillet 2006 à 17:03:59 | Re : Forms en série...

woot6768

Salut,
Peu être est-ce parce-que tu déclare une class dans une autre class. (Je ne suis pas sûr)


_________________________________________________________________________
Woot
vendredi 7 juillet 2006 à 17:31:35 | Re : Forms en série...

immerczeck

Merci de ta réponse!
Je viens d'essayer en mattant la classe à l'extérieur, ça veut toujours pas!
Pas d'autres idées? (je précise que la Form 2 ne contient aucun contrôle, aucun code n'est exécuté au chargement)



vendredi 7 juillet 2006 à 18:58:31 | Re : Forms en série...

apacheswiss

peut-être que ça viens du fait que c'est ton 2ème thread qui gère cette fenêtre, et qui est dans une boucle qui lui prend tout son temps??? je ne suis pas sûre...

essaye de faire en sorte de faire un thread par fenêtre ouverte...
vendredi 7 juillet 2006 à 19:09:48 | Re : Forms en série...

immerczeck

lut!
j'ai changé le code de funct() comme cela:

        private void funct()
        {
            for (; ; )
            {
               
                    if (a == true)
                    {

                        Thread t2=new Thread(new ThreadStart(opennewwin));
                        t2.Start();
                         a = false;
                    }
               
            }
        }


        private void opennewwin(){
            c1.Add(new Conversation("corr", "orig"));
            Thread.CurrentThread.Suspend();

            }
 mais cela ne change pas grand chose...la fenêtre plante toujours
vendredi 7 juillet 2006 à 19:12:53 | Re : Forms en série...

immerczeck

ah au fait!
ça ne risquerait pas de mieux marcher avec un évènement? comme Onachanged par exemple?
Seulement j'y connais rien aux évènements alors je sais pas du tout si ça changerait quelque chose.

Immerczeck
samedi 8 juillet 2006 à 11:27:48 | Re : Forms en série...

Bidou

Administrateur CodeS-SourceS
Salut,
Le problème vient sûrement du fait que tu instancies une nouvelles form dans ton thread !
Franchement, s'est très très déconseillé de faire ce genre de chose, ça n'apporte que des ennuis...



VC# forever
samedi 8 juillet 2006 à 11:44:50 | Re : Forms en série...

Bidou

Administrateur CodeS-SourceS
Réponse acceptée !
Je ne sais pas exactement ce que tu veux faire, mais essayes ceci, peut-être que ça te conviendras :

public partial class Form1 : Form
{
  
private ArrayList _al = new ArrayList();
  
private bool _construct = true;

  
public Form1()
   {
     
this.InitializeComponent();
   }

   private void Form1_Load(object sender, EventArgs e)
   {
     
Thread thread = new Thread(new ThreadStart(funct));
      thread.IsBackground =
true;
      thread.Start();
   }

   private void funct()
   {
     
while (this._construct)
      {
        
this._al.Add(new Conversation("corr", "orig"));
        
Thread.Sleep(100);
      }
     
this.Invoke(new EventHandler(this.CreateWindows), this._al.Count, EventArgs.Empty);
   }

  
private void CreateWindows(object o, EventArgs e)
   {
     
for (int i = 0; i < this._al.Count; i++)
      {
        
// Tu peux utiliser l'arrayList qui contient tes Conversations ici
        
Form form = new Form();
         form.Show();
      }
   }

   private void button1_Click(object sender, EventArgs e)
   {
     
this._construct = false;
   }

   public class Conversation
   {
     
public string corres;
     
public string origin;

      public Conversation(string corr, string orig)
     {
         corres = corr;
         origin = orig;
      }
   }
}



VC# forever
samedi 8 juillet 2006 à 12:16:19 | Re : Forms en série...

immerczeck

lut!
merci beaucoup!!
j'ai adapté un peu le code et ça marche parfaitement!
est-ce que tu pourrais expliquer la ligne
 this.Invoke(new EventHandler(this.CreateWindows), this._al.Count, EventArgs.Empty);
si j'ai bien compris, un nouvel évènement est créé? mais à quoi sert le Invoke? à l'appeler?

Sinon, voici le code, pour ceux que ça intéresserait:

    public partial class Form1 : Form
    {
   private ArrayList _al = new ArrayList();
   private bool _construct = true;

   public Form1()
   {
      this.InitializeComponent();
   }

   private void Form1_Load(object sender, EventArgs e)
   {
      Thread thread = new Thread(new ThreadStart(funct));
      thread.IsBackground = true;
      thread.Start();
   }

   private void funct()
   {
      while (true)
      {
          if (!_construct)
          {
              this._al.Add(new Conversation("corr", "orig"));
              this.Invoke(new EventHandler(this.CreateWindows), this._al.Count, EventArgs.Empty);
              _construct = true;
             
             

          }
      }
     
   }

   private void CreateWindows(object o, EventArgs e)
   {
       Conversation c = _al[_al.Count-1] as Conversation;
//       c.fc = new Form2();
       c.fc.Show();
   }
  

   private void button1_Click(object sender, EventArgs e)
   {
      this._construct = false;
   }

   public class Conversation
   {
      public string corres;
      public string origin;
      public Form2 fc=new Form2();

      public Conversation(string corr, string orig)
     {
         corres = corr;
         origin = orig;
         fc.Text = "De " + orig + " à " + corr;
        
      }
   }
}

Merci beaucoup!


samedi 8 juillet 2006 à 12:27:54 | Re : Forms en série...

Bidou

Administrateur CodeS-SourceS
Petite correction : Quand tu appelles le Invoke, pas besoin de passer this._al.Count, tu peux mettre null sans problème :-)
Pour savoir ce que fais Invoke, je te renvoie sur ce très bon tuto de Mx



VC# forever


Cette discussion est classée dans : public, system, fenetre, void, using


Répondre à ce message

Sujets en rapport avec ce message

Problèmes de création d'un service Windows [ par nyoto ] Bonjour à tous,Ne développant pas depuis très longtemps en .Net je galère grave pour créer un service windows récupérant automatiquement à intervalles Gestion des erreurs WCF dans Silverlight [ par EmacLi ] Bonjour à tous, Dans mon application silverlight, je tombe sur cette erreur apparemment classique lorsqu'un service wcf est utilisé : CommunicationEx Invoquer une DLL c++ dans programme c# [ par Belisir ] Bonjour, depuis quelques jours je me heurte à résoudre un problème qui à première vue, ne semblait pas poser de problème : Invoquer les méthodes d'un Utilisation des tableaux [ par nanard0667 ] Bonjour, Je débute en programation et je souhaiterais faire un petit programme pour calculer un prix T.T.C. à partir d'un prix H.T. avec visual Studio Transmettre les données d'un a un autre form [ par Lorine ] Bonjour, J'ai un form dans lequel j'ai un menu avec * charger la base de donnée * Accès au deuxième form Et une datagridview [code=cs] using System SOS: Binding d'un Combobox [ par yayasam ] A l'aide SVP, c'est la 2eme fois ke je poste mon problème et j'ai tjs pas de réponse:[^^sad1] mon problème réside dans le Binding d'un combobox: tout Plantage designer suite à une modification sur le formulaire [ par Mickael1984 ] Bonjour, je suis un peu perdu sur un développement que je fais actuellement je mets le code, si quelqu'un a déjà eu ce genre de problème. Mon problè probléme : Object reference not set to an instance of an object [ par ami7 ] bonjour j'ai message d'erreur suivant : Object reference not set to an instance of an object et indique un trait jaune au niveau de la méthode " de


Nos sponsors


Sondage...

CalendriCode

Février 2012
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
272829    

Consulter la suite du CalendriCode

Photothèque

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 1,716 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales