Cet article est un article miroir de traduction automatique, veuillez cliquer ici pour accéder à l’article original.

Vue: 22992|Répondre: 2

[Source] Explication détaillée de plusieurs façons de résoudre le problème d’un programme C# qui ne permet qu’une seule instance de s’exécuter

[Copié le lien]
Publié sur 08/12/2016 13:11:13 | | |

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.




Précédent:Différence entre Directory.GetCurrentDirectory et Application.StartupPath
Prochain:La différence entre le profil client .Net Framework4 et .Net Framework4.0
Publié sur 10/07/2017 06:31:21 |
Merci de partager
 Propriétaire| Publié sur 23/07/2024 14:21:04 |
Les programmes C# n’autorisent qu’une seule instance à exécuter le bon code
https://www.itsvse.com/thread-3391-1-1.html
Démenti:
Tous les logiciels, supports de programmation ou articles publiés par Code Farmer Network sont uniquement destinés à l’apprentissage et à la recherche ; Le contenu ci-dessus ne doit pas être utilisé à des fins commerciales ou illégales, sinon les utilisateurs assumeront toutes les conséquences. Les informations sur ce site proviennent d’Internet, et les litiges de droits d’auteur n’ont rien à voir avec ce site. Vous devez supprimer complètement le contenu ci-dessus de votre ordinateur dans les 24 heures suivant le téléchargement. Si vous aimez le programme, merci de soutenir un logiciel authentique, d’acheter l’immatriculation et d’obtenir de meilleurs services authentiques. En cas d’infraction, veuillez nous contacter par e-mail.

Mail To:help@itsvse.com