Thread + Form.Show();

Signaler
Messages postés
216
Date d'inscription
jeudi 30 janvier 2003
Statut
Membre
Dernière intervention
12 avril 2017
-
Messages postés
216
Date d'inscription
jeudi 30 janvier 2003
Statut
Membre
Dernière intervention
12 avril 2017
-
Bonjour,

je fais un bout de code qui pourrait être résumé par le code suivant:

J'ai une MainForm qui crée un objet Form2:
Form2 frm2=new Form2();

Mais sans l'afficher.
Cette Form2 s'affiche automatiquement après qu'un Thread lui en ai donné l'autorisation. Le problème c'est que celle-ci s'affiche brievement puis disparait à jamais.

public Form2()
        {
            myThread=new Thread(new ThreadStart(ThreadFunction));
            myThread.Start();
        }
       
        private void ThreadFunction()
        {
            int count=0;
            while(count<100)
            {
                count++;
            }
            this.Show();
            myThread.Abort();
        }


Quelq'un aurait-il une idée.

Merci beaucoup de votre aide.

Nico

P.S: bien évidement le code associé à ma ThreadFunction n'est pas aussi simple mais j'ai réussi à reproduire le problème avec celui ci-dessus donc cela simplifiera pas mal.

A+

*******************************************


SharpDevelop est mon ami! CSharpFR.com aussi!!!!!!!!!

7 réponses

Messages postés
216
Date d'inscription
jeudi 30 janvier 2003
Statut
Membre
Dernière intervention
12 avril 2017
2
Bon je vois que mon probleme vous laisse sans voix (même coq ou Bidou)

J'ai remplacé this.Show(); par this.ShowDialog(); et là ma fenêtre s'affiche correctement...

A+

*******************************************
SharpDevelop est mon ami! CSharpFR.com aussi!!!!!!!!!
Messages postés
216
Date d'inscription
jeudi 30 janvier 2003
Statut
Membre
Dernière intervention
12 avril 2017
2
zut, j'ai été content trop vite... ma fenetre s'affiche correctement, mais elle ne fait plus rien. Elle doit surement être bloquée sur this.ShowDialog() en attendant que je ferme la fenetre...

c'est trop injuste.

J'espère que quelqu'un viendra à ma rescousse

A+

*******************************************
SharpDevelop est mon ami! CSharpFR.com aussi!!!!!!!!!
Messages postés
216
Date d'inscription
jeudi 30 janvier 2003
Statut
Membre
Dernière intervention
12 avril 2017
2
Merci à tous pour votre aide précieuse
J'ai finalement trouvé une solution:

dans ma Form2 je crée un public bool ready

dans ma Form principale je lance un Thread qui a lire l'état de la variable ready. Si elle est à true alors je fais un Form2.ShowDialog();

Ca marche mais je ne sais pas si c'est très propre

Si quelqu'un a une meilleure idée n'hésitez pas.

Nico

A+

*******************************************
SharpDevelop est mon ami! CSharpFR.com aussi!!!!!!!!!
Messages postés
5487
Date d'inscription
dimanche 4 août 2002
Statut
Modérateur
Dernière intervention
20 juin 2013
56
Bonjour,
Je pense que tu as une erreur de conception. En effet, tu démarres un form dans un thread différent, ce qui est fortement déconseillé, ça peut amener des résultats assez bizarre et poser pleins de problèmes!

<hr />
-My Blog-
Messages postés
216
Date d'inscription
jeudi 30 janvier 2003
Statut
Membre
Dernière intervention
12 avril 2017
2
Merci Bidou,

je m'en doutais... Il faut que je réorganise un peu mon soft...

A+

*******************************************
SharpDevelop est mon ami! CSharpFR.com aussi!!!!!!!!!
Messages postés
5487
Date d'inscription
dimanche 4 août 2002
Statut
Modérateur
Dernière intervention
20 juin 2013
56
Oui, l'UI doit être crée dans le thread principal.
Ce qui est fait dans des threads à part, c'est les traitements "de données". L'affiche peut ensuite être fait grâce à la méthode invoke qui permet "de synchroniser" le résultat de traitement avec l'UI (sinon, on a du cross threading).

J'imagine que tu as déjà lu le tuto de Mx à ce sujet...

<hr />
-My Blog-
Messages postés
216
Date d'inscription
jeudi 30 janvier 2003
Statut
Membre
Dernière intervention
12 avril 2017
2
Merci Bidou,

oui j'ai lu l'excellent tuto de Mx.

En fait, ce que je suis en train de faire c'est une petite appli de type MSN (encore une).
J'ai donc une mainForm avec la liste de mes contacts. Cette mainForm crée une ServeurForm. Cette Serveur Form sert à écrire et envoyer les messages. Elle est cachée et lance un Thread qui écoute les messages reçus. Une fois qu'un message est reçu, elle s'affiche.

Du coté Client, lorsque je clique sur le nom d'un contact dans ma mainForm, j'affiche une ClientForm qui est identique à la ServeurForm mais qui est configurée en tant que Client.

Faut que je réffechisse un peu ce week-end à une façon peut-être un peu plus propre de réorganiser mon appli.

Au jour d'aujourd'hui elle fonctionne pas trop mal mais pour la faire evoluer vers une version multi discussion (plusieurs clients) ou conversation à plusieurs cela me semble plus compliquer avec la structure actuelle...

A+

*******************************************
SharpDevelop est mon ami! CSharpFR.com aussi!!!!!!!!!