begin process at 2010 02 10 06:24:36
  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 WebService C# (variable non modifiée !!) [ par mesdevs ] Bonjour, Je débute tout juste en C# (Visual Studio 2005), et j'ai déjà un problème (désolé si ça vous parait trivial, mais moi ça me prend la tête) : probleme de fenetre fille/mere [ par gretata ] bonjour a tous !!bonjour, jai un problème pour appeler ma fenetre fille dans une fenetre parent ou mere, voila le code :using</font probleme d' interopérabilité [ par thmatew ] Amis développeurs, bonjour,j'ai un petit souci, je n'arrive pas a utilisé une DLL que j'ai créer dans mon programme, c'est un petit programme tt simpl Generer des points aleatoirement !? [ par jimmy69 ] Bonjour  a tous ,Je suis sous visual studio . net et j'apprends le c sharp !Je me suis fait une class que j'ai nomme MyPoint.cs que voici :----------- Serveur UDP [ par Sobieski ] Salut.Je voudrais printer dans la console ce qui arrive en UDP sur le port 4321. J'ai fait un bout de code mais ca plante comme il faut :/ using Syste c# [ par akodadi ] j ai un probleme j veux afficher une forme et j comprens pa ces messages d bugs public override <FONT color=#000 [C#][ActiveX][Thread][HTML/Javascript] Evénements OK mais pas dans tous les cas [ par Mediant ] Bonjour !Voilà, j'au dû me mettre au C# il y a quelque jours afin de réaliser un composant ActiveX. J'ai besoin que ce composant puisse m'envoyer des Plusieurs structures imbriquées [ par F0ra ] Bonjour, Je voudrais réaliser plusieurs structures imbriquées Comme : Couches[1].Neurons[1].w[1]=0 Dans le ficier Ia.cs : using System; using System Probleme OleDbDataReader [ par bibibiba ] Bonjour,je suis novice en C# et j'ai une classe BaseAccess qui doit permettre de lire les données d'un utilisateur contenues dans une base,pour ce fai


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Février 2010
LMMJVSD
1234567
891011121314
15161718192021
22232425262728

Consulter la suite du CalendriCode

 
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 : 0,577 sec (3)

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