Este artículo es un artículo espejo de traducción automática, por favor haga clic aquí para saltar al artículo original.

Vista: 22992|Respuesta: 2

[Fuente] Explicación detallada de varias formas de resolver el problema de un programa en C# que solo permite ejecutar una instancia

[Copiar enlace]
Publicado en 8/12/2016 13:11:13 | | |

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.




Anterior:Diferencia entre Directory.GetCurrentDirectory y Application.StartupPath
Próximo:La diferencia entre el perfil de cliente .Net Framework4 y .Net Framework4.0
Publicado en 10/7/2017 6:31:21 |
Gracias por compartir
 Propietario| Publicado en 23/7/2024 14:21:04 |
Los programas en C# solo permiten que una instancia ejecute el código correcto
https://www.itsvse.com/thread-3391-1-1.html
Renuncia:
Todo el software, materiales de programación o artículos publicados por Code Farmer Network son únicamente para fines de aprendizaje e investigación; El contenido anterior no se utilizará con fines comerciales o ilegales; de lo contrario, los usuarios asumirán todas las consecuencias. La información de este sitio proviene de Internet, y las disputas de derechos de autor no tienen nada que ver con este sitio. Debes eliminar completamente el contenido anterior de tu ordenador en un plazo de 24 horas desde la descarga. Si te gusta el programa, por favor apoya el software genuino, compra el registro y obtén mejores servicios genuinos. Si hay alguna infracción, por favor contáctanos por correo electrónico.

Mail To:help@itsvse.com