[C#] Instancier un objet Form depuis un Thread
Bonjour,
Je travail avec Visual studio 2003.
Dans mon projet, j'ai un thread qui s'occupe de recevoir de l'information sous forme de string. Je voudrais, à la réception d'un message, ouvrir une fenêtre qui affichera le message reçu.
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
| private void creation_Threadecoute()
{
this.monThread = new Thread(new ThreadStart(threadEcoute));
this.monThread.Name="threadEcoute";
this.monThread.Start();
}
private void threadEcoute()
{
continuer = true;
string data;
while(continuer)
{
/* réception du message dans data qui utilise un ReadLine
qui bloque le thread jusqu'à la réception d'un message */
//création d'un Form
Erreur err = new Erreur(data);
err.Show();
}
} |
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46
| public class Erreur : System.Windows.Forms.Form
{
private System.Windows.Forms.Label label1;
private System.Windows.Forms.Button button1;
private System.ComponentModel.Container components = null;
public Erreur(string msg)
{
InitializeComponent();
this.label1.Text = msg;
}
private void InitializeComponent()
{
this.label1 = new System.Windows.Forms.Label();
this.button1 = new System.Windows.Forms.Button();
this.SuspendLayout();
//
// label1
//
this.label1.Location = new System.Drawing.Point(24, 16);
this.label1.Name = "label1";
this.label1.Size = new System.Drawing.Size(240, 72);
this.label1.TabIndex = 0;
//
// button1
//
this.button1.Location = new System.Drawing.Point(104, 104);
this.button1.Name = "button1";
this.button1.TabIndex = 1;
this.button1.Text = "Ok";
this.button1.Click += new System.EventHandler(this.button1_Click);
//
// Erreur
//
this.AutoScaleBaseSize = new System.Drawing.Size(5, 13);
this.ClientSize = new System.Drawing.Size(292, 133);
this.Controls.Add(this.button1);
this.Controls.Add(this.label1);
this.Name = "Erreur";
this.Text = "Erreur";
this.ResumeLayout(false);
}
private void button1_Click(object sender, System.EventArgs e)
{
this.Close();
}
} |
Quand la fenêtre Erreur s'ouvre, elle se "bloque", elle plante jusqu'à ce que je ferme la fenêtre Principal qui à créé le thread (qui implique le kill du thread).
Est-ce que ce serait possible, depuis le thread, de créer la fenêtre Erreur comme je le désire et qu'elle s'exécute normalement? Est-ce que la création d'un nouvel objet Form n'est pas équivalent à la création d'un nouveau thread et donc que ce nouveau thread s'execute indépendemment du reste?
Merci d'avance
A toute
Philip.