Question

J'ai une application, "myprogram.exe", qui appelle des fonctions et du code dans une dll, une de ces fonctions qui "myprogram.exe" les appels créent une nouvelle instance d’un winform, " MyForm.cs " puis montrez-le en utilisant form.show ();.

Je peux avoir le numéro de "myprogram.exe" instances en cours d'exécution, mais je souhaite ne disposer que d'une seule instance de "MyForm.cs". pour chaque instance de "myprogram.exe".

Le problème que j'ai, c'est que même si je pensais utiliser mutex dans "MyForm.cs", pour créer un mutex et leur demander si une instance est déjà en cours d'exécution, il en crée parfois une autre, malgré le mutex.

Existe-t-il un autre moyen que je puisse utiliser pour valider si une instance de "myprogram.exe"? a déjà créé une instance de "MyForm.cs".

Était-ce utile?

La solution

Selon le commentaire de @ Joe, le problème réside probablement dans la mise en œuvre du Mutux.

Cette réponse à une autre question montre la bonne façon de le faire:

  

K. Scott Allen a une bonne rédaction sur l'utilisation d'un Mutex à cet effet et problèmes que vous rencontrerez avec le GC.

     
    

Si je souhaite avoir une seule instance de l'application exécutée sur toutes les sessions de la machine, je peux placer le mutex nommé dans l'espace de noms global avec le préfixe «Global \».

[STAThread]
static void Main() 
{
   using(Mutex mutex = new Mutex(false, "Global\\" + appGuid))
   {
      if(!mutex.WaitOne(0, false))
      {
         MessageBox.Show("Instance already running");
         return;
      }

Application.Run(new Form1());
   }
}
  

Autres conseils

Je poste le lien ci-dessous, car je n’ai trouvé aucun article connexe en C ++ et MFC. Donc, Pour C ++, MFC et Win32, vous pouvez utiliser http://flounder.com/nomultiples.htm

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top