Comment amener le formulaire principal en haut lorsque vous essayez d’exécuter une deuxième instance de l’application

J’ai écrit une application Windows simple avec un seul formulaire. Son but est de ne s’exécuter que dans un seul cas. J’ai utilisé l’approche mutex et envoie un message lorsqu’une deuxième instance tente de s’exécuter. Maintenant, j’aimerais changer cette boîte de message et je veux seulement amener la première instance au sumt lorsque vous essayez de lancer une deuxième instance. Mon code est actuellement:

namespace WindowsFormsApplication2 { static class Program { [STAThread] static void Main() { bool mutexCreated = false; System.Threading.Mutex mutex = new System.Threading.Mutex(true,@"Local\WindowsFormsApplication2.WindowsFormsApplication2.exe", out mutexCreated); if(!mutexCreated ) { if( MessageBox.Show("The application is already running.Hit the OK to exit", "",MessageBoxButtons.OK, MessageBoxIcon.Information ) != DialogResult.Cancel ) { mutex.Close(); return; } } Application.EnableVisualStyles(); Application.SetCompatibleTextRenderingDefault(false); Application.Run(new Form1()); } } } 

.NET supporte déjà très bien cela, supportant à la fois les applications à instance unique et informant la première application du démarrage d’une autre instance. Privilégiez fortement cette option par rapport à la vôtre. Utilisez la classe WindowsFormsApplicationBase, modifiez le fichier Program.cs comme suit:

 using System; using System.Windows.Forms; using Microsoft.VisualBasic.ApplicationServices; // Add reference to Microsoft.VisualBasic namespace WindowsFormsApplication1 { class Program : WindowsFormsApplicationBase { public Program() { this.EnableVisualStyles = true; this.IsSingleInstance = true; this.MainForm = new Form1(); } protected override void OnStartupNextInstance(StartupNextInstanceEventArgs e) { e.BringToForeground = true; } [STAThread] public static void Main(ssortingng[] args) { new Program().Run(args); } } } 

Notez que la méthode OnStartupNextInstance () garantit que la fenêtre principale est ramenée au premier plan. Vous pouvez également utiliser sa propriété e.CommandLine pour obtenir les arguments de ligne de commande passés de la deuxième instance à l’instance principale. Ce qui a tendance à être utile si vous utilisez une association de fichier.

Ceci est la version la plus récente d’un article qui fait la même chose que je peux trouver. Essentiellement, vous récupérez les autres informations de processus, puis vous les transmettez.

http://social.msdn.microsoft.com/Forums/en/csharpgeneral/thread/42b3db75-e61e-4f59-bf2b-c96a40cfb4e4