Comment exécuter une boucle + windows forms

Résolu/Fermé
PlayFox - Modifié le 6 mars 2019 à 22:19
Whismeril Messages postés 19028 Date d'inscription mardi 11 mars 2003 Statut Non membre Dernière intervention 24 avril 2024 - 7 mars 2019 à 14:22
Bonjour,

Je ne comprend pas pourquoi quand ça mon lance mon windows form ma phrase s'arrête de s'afficher sur la console. Comment résoudre ça ?


while (true)
            {
                int iTemp = 0;
                if (true)
                {
                     System.Threading.Thread.Sleep(TimeSpan.FromSeconds(0.1));
                    Console.WriteLine("YOU DIDN'T SAY THE MAGIC WORD !");
                    iTemp = iTemp + 1;
                }
                if(iTemp == 1)
                {
                    Application.EnableVisualStyles();
                    Application.SetCompatibleTextRenderingDefault(false);
                    Application.Run(new Program());
                }
A voir également:

1 réponse

Reivax962 Messages postés 3671 Date d'inscription jeudi 16 juin 2005 Statut Membre Dernière intervention 11 février 2021 1 011
7 mars 2019 à 10:55
Bonjour,

Si je ne dis pas de bêtises, l'appel à Application.Run() est bloquant.
Tu peux t'en rendre compte en exécutant ton programme pas à pas : tu resteras coincé sur cette ligne jusqu'à ce que ta fenêtre soit fermée.

Si tu veux que la boucle soit exécutée en continu pendant que ton application tourne, il faut que tu crées un nouveau thread. C'est assez simple. Il y a plusieurs façon de faire. Comme tu veux que ça tourne à intervalles réguliers, tu peux utiliser un Timer (System.Threading.Timer)

Ton code deviendrait :
{
    var timer = new System.Threading.Timer(_ => Console.WriteLine("YOU DIDN'T SAY THE MAGIC WORD !"), null, TimeSpan.FromSeconds(0), TimeSpan.FromSeconds(0.1));

    Application.EnableVisualStyles();
    Application.SetCompatibleTextRenderingDefault(false);
    Application.Run(new Program());
}

Xavier
0
Whismeril Messages postés 19028 Date d'inscription mardi 11 mars 2003 Statut Non membre Dernière intervention 24 avril 2024 931
7 mars 2019 à 12:10
Bonjour,
D’un autre côté, l’affichage dans la console d’un programme winform ne marche qu’en développement.
Donc si tu as besoin qu’une fois utliser sans visual studio ton message s’affiche, il faut faire autrement
0
Reivax962 Messages postés 3671 Date d'inscription jeudi 16 juin 2005 Statut Membre Dernière intervention 11 février 2021 1 011
7 mars 2019 à 12:14
Ce n'est pas faux. Ceci dit, j'interprète peut-être, mais il me semblait que le Console.WriteLine n'était là que pour valider sa démarche avant d'y mettre un « vrai » code
0
Merci à tous !

La commande de Reivax962 fonctionne parfaitement !
0
Whismeril Messages postés 19028 Date d'inscription mardi 11 mars 2003 Statut Non membre Dernière intervention 24 avril 2024 931
7 mars 2019 à 14:22
Par contre, il faut que tu fasses en sorte d’arrêter le thread quand tu fermes la fenêtre. En l’etat il risque de tourner indéfiniment.

Il est déconseillé de coder dans program.cs, c’est censé être juste le point d’entrée du logiciel.
Tu peux (et devrais) lancer le thread depuis le formulaire (dans le constructeur, le load ou le shown)
0