Lancer plusieurs WinForms en même temps (Application.Run(Form1))

Résolu
Siteauludo Messages postés 60 Date d'inscription mercredi 25 mai 2005 Statut Membre Dernière intervention 15 mai 2007 - 23 avril 2006 à 16:57
cs_maneli Messages postés 8 Date d'inscription dimanche 16 décembre 2007 Statut Membre Dernière intervention 21 décembre 2007 - 21 déc. 2007 à 01:03
Bonjour,
voilà j'utilise Microsoft Visual Studio Standart Edition 2005, je programme en C# (pas de Dot Net (.NET)). Je souhaiterai lancer plusieurs Windows Forms en même temps. Je m'explique : j'ai un fichier .cs Start.cs, avec environs quatre forms. Depuis Start.cs, aucun problème pour lancer une form : application.run(form). Mais moi je voudrai lancer le quatre forms en même temps, et application.run ne me permet pas de faire ça, car si dans Start.cs je fais ça, il va passer la main à la form indiquée, et lorsque je ferme la form, il va retourner dans Start.cs pour continuer à executer le code. J'ai cherché, et le moyen le plus simple (enfin il me semble) et d'utiliser le multithreading, mais il me trouve des erreurs bizarres :


using System;

using System.Collections.Generic;

using System.Text;

using System.Diagnostics;

using System.Windows.Forms;

using System.IO;

using System.Windows.Forms.VisualStyles;

using System.Threading;


namespace SecureScreen
{



class
Start
{


[
STAThread]



static
void Main()
{

Process proc =
Process.GetCurrentProcess();

Process[] processes =
Process.GetProcessesByName(proc.ProcessName);

if (processes.Length != 1)
{

return;
}

Thread unThread1 =
new
Thread(
new
ThreadStart());
unThread1.Start();
Thread unThread2 =
new
Thread(
new
ThreadStart());
unThread2.Start();
Thread unThread3 =
new
Thread(
new
ThreadStart());
unThread3.Start();
Thread unThread4 =
new
Thread(
new
ThreadStart());
unThread4.Start();

}
}
class
launchPrograms
{

public
void launchSecureScreen
{
Application.Run(
new SecureScreenForm());
}

public
void launchClipBoardManager
{
Application.Run(
new ClipBoardManagerForm());
}

public
void launchFilesLocker
{
Application.Run(
new FilesLockerForm());
}

public
void launchPasswordSecurityChecker
{
Application.Run(
new PasswordSecurityCheckerForm());
}
}

}

Mais il me souligne tout les application (ici en rouge), et il me dit : "A get or set accessor expected ".
Auriez-vous une idée pour corriger cette erreur ?
Auriez-vous une méthode plus efficace ?

Merci beaucoup,
Siteauludo
A voir également:

4 réponses

Siteauludo Messages postés 60 Date d'inscription mercredi 25 mai 2005 Statut Membre Dernière intervention 15 mai 2007
23 avril 2006 à 17:05
Ha oui, ce code :

Process proc = Process.GetCurrentProcess();
Process[] processes = Process.GetProcessesByName(proc.ProcessName);
if (processes.Length != 1)
{
return;
}

n'a pas de rapport avec la question, c'est juste pour s'assurer qu'une seule instance du logiciel soit lancée.
0
Siteauludo Messages postés 60 Date d'inscription mercredi 25 mai 2005 Statut Membre Dernière intervention 15 mai 2007
23 avril 2006 à 18:27
Merci beaucoup !

Pour les futurs personnes qui auront ce problème :

puisque la fermeture de l'application n'est plus "automatique", il faut faire un Application.Exit(), ou un ExitThread, sinon il n'y aura plus de fenêtres visibles, mais le programme restera lancé.
0
cs_maneli Messages postés 8 Date d'inscription dimanche 16 décembre 2007 Statut Membre Dernière intervention 21 décembre 2007
21 déc. 2007 à 01:03
Bonsoir.

J'ai un problème similaire car je dois lancer un socket listener ainsi qu'un form.
or si je lance le socketlistener (listener.Start(); ClientTask.Start()) je perds la main.et le lancement de application.start(new form()) n'a pas lieu.

Je veux connaitre le moyen de lancer , par exemple plusieurs serveurs ou processus depuis 1 meme programme.

cdt
0
cs_coq Messages postés 6349 Date d'inscription samedi 1 juin 2002 Statut Membre Dernière intervention 2 août 2014 101
23 avril 2006 à 17:29
Salut,

Avoir plusieurs thread de GUI ne me parait pas forcément une bonne idée.
D'ailleurs je me demande même si c'est possible sur du Win32. (?)

Première étape : Application.Run.
Et tels qu'ils sont, tes threads ne risquent pas de se lancer de toute façon.

Ta méthode de vérification d'instance unique est dangereuse et inefficace : il suffit de nommer un programme de la même manière que le tiens pour que ton single instance devienne un zero instance ;-)
Regarde plutôt du côté des mutex, ce qui te permettra aussi de gérer l'aspect multiutilisateur.

Pour ton lancement multi-forme, ne peut tu pas avoir un formulaire principal qui gère les autres ?
Sinon, tu peux faire ceci :
[STAThread]
static void Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);



Form1 form1 = new Form1();
form1.Show();
Form2 form2 = new Form2();
form2.Show();
Form3 form3 = new Form3();
form3.Show();
Form4 form4 = new Form4();
form4.Show();


Application.Run();
}

Il faudrat que tu gères la fermeture de l'application, elle n'est plus "automatique", voir doc Application.Run()

/*
coq
MVP Visual C#
*/
-2
Rejoignez-nous