Cómo permitir que un programa C# ejecute solo una instancia a la vez
I. Exclusión mutua de procesos
Principio: al obtener la lista de procesos del sistema, si se encuentra un proceso renombrado, significa que el programa ya se está ejecutando y el proceso que se está ejecutando recientemente sale. en este momento;
Implementación: método estático GetProcessesByName(string ProcessName) de la clase System.Diagnostics.Process
Process[] ps = Process.GetProcessesByName(Guo.exe); ps! = nullamp; ps.Length1){//Se encontró un proceso duplicado}
Escrito en el método principal para determinar si la longitud es mayor que 1, porque también está en la lista de procesos después del inicio. Longitud == 1;
Ventajas: Código simple;
Desventajas: Otros programas que se renombran lo llamarán por error (por ejemplo,
II. * ** Bloqueo de disfrute (archivo, registro)
Principio: al ejecutar el programa, cree *** valor de disfrute en una ubicación pública *** (por ejemplo, cree un archivo en un directorio fijo, o en una ubicación de registro fija, cree valor) y elimine el valor al salir del programa. Si se encuentra que el valor ya existe cuando se ejecuta, significa que el programa ya se está ejecutando y el proceso recién ejecutado se cierra. Ventajas; : La lógica es fácil de entender; p>
Desventajas: si el programa no sale correctamente, el valor ****-hedge no se eliminará, lo que provocará que el programa no se reinicie; p>
3.Mutex _mutex; staticvoidMain(string[ ] args){// Si es posible abrir un nuevo proceso boolcreateNew // Obtener el Guid del ensamblado como identificador único
Atributo guid_attr; = Attribute.Threading.Mutex(true
,guid ,
outcreateNew); if (false==createNew){//Buscar procesos duplicados}_mutex.ReleaseMutex();}} Ventajas: realmente permite que el mismo programa ejecute un solo proceso Desventajas: No disponible p>;