Méthode 1 : Utilisez les variables mutex du fil de discussion. Définissez des variables mutex pour déterminer si une instance est en cours d’exécution. Changez la fonction Main() dans le fichier program.cs par le code suivant :
Note : Dans le programme, l’instruction System.Threading.Mutex run = new System.Threading.Mutex(true, « single_test », out runone » ; pour créer une variable mutex, exécuter où « single_test » est le nom mutex, et lorsque cette méthode revient, si un mutex local ou un système de nommage spécifié est créé, la valeur booléenne runone est vraie ; faux si le système de nommage spécifié MUTEXE existe déjà. Les mutex nommés sont à l’échelle du système. Méthode 2 : Utilisez la méthode de jugement du processus, avant d’exécuter le programme, nous trouvons s’il existe un processus portant le même nom dans le processus, et si la position d’exécution correspond aussi au processus. Appliquez la classe Process dans l’espace de noms System.Diagnostics en C# pour l’implémenter, le code principal est le suivant : 1. Ajouter une fonction au fichier program.cs comme suit :
2. Changer la fonction principale () pour le code suivant :
Méthode 3 : Méthode atomique globale, avant de créer un programme, vérifiez d’abord la table atomique globale pour voir s’il existe un atome A spécifique (ajouté au moment de la création), puis arrêtez de le créer lorsqu’il existe, indiquant que le programme a exécuté une instance ; Si elle n’existe pas, lancez le programme et souhaitez ajouter un atome spécifique A à la table atomique globale ; Lors de la sortie du programme, souvenez-vous de libérer un atome A spécifique, sinon il ne sera libéré qu’une fois l’ordinateur éteint. L’implémentation de C# est la suivante : 1. Déclarer l’interface de fonction WinAPI
[System.Runtime.InteropServices.DllImport(« kernel32.dll »)] externe statique public UInt32 GlobalAddAtom(String lpString) ; Ajouter des atomes [System.Runtime.InteropServices.DllImport(« kernel32.dll »)] externe statique public UInt32 GlobalFindAtom(chaîne de chaînes lpString) ; Trouver les atomes [System.Runtime.InteropServices.DllImport(« kernel32.dll »)] externe statique public UInt32 GlobalDeleteAtom(UInt32 nAtom) ; Supprimer les atomes 2. Modifier la fonction Main() comme suit :
3. Ajouter le code suivant à l’événement FormClosed : GlobalDeleteAtom(GlobalFindAtom(« jiaao_test »)) ; Supprimer le « jiaao_test » atomique. --------------------------------------*-------*--------*----------------------------------------------- Ce qui précède est l’idée générale de base pour créer un programme mutuellement exclusif, et je pense personnellement que la première méthode est la plus simple. |