Pregunta

Tengo una aplicación, "myprogram.exe", que llama a funciones y código dentro de un archivo dll, una de estas funciones que "myprogram.exe" las llamadas crean una nueva instancia de winform, "MyForm.cs" y luego muéstralo usando form.show () ;.

Puedo tener el número 'n' de 'myprogram.exe' instancias en ejecución, pero quiero tener solo una instancia de "MyForm.cs" para cada instancia de " myprogram.exe " ;.

El problema que tengo es que incluso pensé que estaba usando mutex dentro de "MyForm.cs" para crear un mutex y les preguntan si ya se está ejecutando una instancia, a veces crea otra instancia, a pesar del mutex.

¿Hay alguna otra manera que pueda usar para validar si una instancia de " myprogram.exe " ya ha creado una instancia de "MyForm.cs".

¿Fue útil?

Solución

Según el comentario de @ Joe, es probable que el problema esté en la implementación de Mutux.

Esta respuesta a otra pregunta demuestra la forma correcta de hacerlo:

  

K. Scott Allen tiene una buena redacción sobre el uso de un Mutex para este propósito y problemas con los que se encontrará con el GC.

     
    

Si quiero que solo se ejecute una instancia de la aplicación en todas las sesiones de la máquina, puedo colocar el mutex con nombre en el espacio de nombres global con el prefijo & # 8220; Global \ & # 8221 ;.

[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());
   }
}
  

Otros consejos

Publico el siguiente enlace, ya que no pude encontrar ningún artículo relacionado en C ++ y MFC. Por lo tanto, Para C ++, MFC y Win32 puede usar http://flounder.com/nomultiples.htm

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top