Método 1: Usa variables mutex de hilo. Define variables mutex para determinar si una instancia está en ejecución. Cambia la función Main() en el archivo program.cs por el siguiente código:
Nota: En el programa, la instrucción System.Threading.Mutex run = new System.Threading.Mutex(true, "single_test", out runone); para crear una variable mutex, ejecutar, donde "single_test" es el nombre mutex, y cuando este método se devolviera, si se crea un mutex local o un sistema de nombres especificado mutex, el valor booleano runone es verdadero; false si ya existe el sistema de nombres especificado mutexe. Los mutex con nombre son de todo el sistema. Método 2: Usar la forma de juzgar el proceso: antes de ejecutar el programa, comprobamos si hay un proceso con el mismo nombre en el proceso, y la posición de ejecución también es el mismo proceso. Aplica la clase Process en el espacio de nombres System.Diagnostics en C# para implementarlo, el código principal es el siguiente: 1. Añadir una función al archivo program.cs de la siguiente manera:
2. Cambiar la función principal () al siguiente código:
Método 3: Método atómico global, antes de crear un programa, primero revisa la tabla atómica global para ver si hay un átomo A específico (añadido en el momento de la creación) y deja de crearlo cuando existe, indicando que el programa ha ejecutado una instancia; Si no existe, ejecuta el programa y quieres añadir un átomo A específico a la tabla atómica global; Al salir del programa, recuerda liberar un átomo A específico, de lo contrario no se soltará hasta que el ordenador esté apagado. La implementación de C# es la siguiente: 1. Declarar la interfaz de la función WinAPI
[System.Runtime.InteropServices.DllImport("kernel32.dll")] externo estático público UInt32 GlobalAddAtom(String lpString); Suma átomos [System.Runtime.InteropServices.DllImport("kernel32.dll")] externa estática pública UInt32 GlobalFindAtom(String lpString); Encontrar átomos [System.Runtime.InteropServices.DllImport("kernel32.dll")] externo estático público UInt32 GlobalDeleteAtom(UInt32 nAtom); Eliminar átomos 2. Modificar la función Main() de la siguiente manera:
3. Añadir el siguiente código al evento FormCloseded: GlobalDeleteAtom(GlobalFindAtom("jiaao_test")); Eliminar la "jiaao_test" atómica. --------------------------------------*-------*--------*----------------------------------------------- Lo anterior es la idea básica y general de crear un programa mutuamente excluyente, y personalmente creo que el primer método es el más sencillo. |