Lancer plusieurs WinForms en même temps (Application.Run(Form1)) [Résolu]

Siteauludo 60 Messages postés mercredi 25 mai 2005Date d'inscription 15 mai 2007 Dernière intervention - 23 avril 2006 à 16:57 - Dernière réponse : cs_maneli 8 Messages postés dimanche 16 décembre 2007Date d'inscription 21 décembre 2007 Dernière intervention
- 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
Afficher la suite 

Votre réponse

4 réponses

Siteauludo 60 Messages postés mercredi 25 mai 2005Date d'inscription 15 mai 2007 Dernière intervention - 23 avril 2006 à 17:05
0
Merci
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.
Commenter la réponse de Siteauludo
Siteauludo 60 Messages postés mercredi 25 mai 2005Date d'inscription 15 mai 2007 Dernière intervention - 23 avril 2006 à 18:27
0
Merci
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é.
Commenter la réponse de Siteauludo
cs_maneli 8 Messages postés dimanche 16 décembre 2007Date d'inscription 21 décembre 2007 Dernière intervention - 21 déc. 2007 à 01:03
0
Merci
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
Commenter la réponse de cs_maneli
cs_coq 6366 Messages postés samedi 1 juin 2002Date d'inscription 2 août 2014 Dernière intervention - 23 avril 2006 à 17:29
-2
Merci
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#
*/
Commenter la réponse de cs_coq

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.