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();
}
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(); }
}
}
}
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)
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...
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.
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...
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;
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