Метод 1: Използвайте променливи за мютекс на нишките. Дефинирайте mutex променливи, за да определите дали екземплярът работи. Променете функцията Main() във файла program.cs на следния код:
Забележка: В програмата операторът System.Threading.Mutex run = new System.Threading.Mutex(true, "single_test", out runone); за да се създаде mutex променлива, където "single_test" е mutex името, и когато този метод се върне, ако се създаде локален mutex или мютекс от система за именуване, булевата стойност runone е вярна; false ако mutexe на зададената система за именуване вече съществува. Именуваните мютекси са за цялата система. Метод 2: Използвайте начина, по който оценяваме процеса, преди да стартираме програмата, откриваме дали има процес със същото име в процеса, и текущата позиция също е същият процес. Приложите класа Process в пространството на имената System.Diagnostics на C#, за да го реализирате, основният код е следният: 1. Добавете функция към program.cs файла по следния начин:
2. Променете функцията Main () на следния код:
Метод 3: Глобален атомен метод, преди да създадете програма, първо проверете глобалната атомна таблица, за да видите дали има конкретен атом A (добавен при създаването му), и спрете да го създавате, когато съществува, което показва, че програмата е стартирала инстанция; Ако не съществува, стартирайте програмата и искате да добавите конкретен атом A към глобалната атомна таблица; При излизане от програмата не забравяйте да освободите конкретен атом A, в противен случай той няма да бъде освободен, докато компютърът не бъде изключен. Реализацията на C# е следната: 1. Обявете интерфейса на функцията WinAPI
[System.Runtime.InteropServices.DllImport("kernel32.dll")] публичен статичен външен UInt32 GlobalAddAtom(String lpString); Добавете атоми [System.Runtime.InteropServices.DllImport("kernel32.dll")] публичен статичен външен UInt32 GlobalFindAtom(String lpString); Намерете атоми [System.Runtime.InteropServices.DllImport("kernel32.dll")] публичен статичен външен UInt32 GlobalDeleteAtom(UInt32 nAtom); Изтриване на атоми 2. Модифицирайте функцията Main() по следния начин:
3. Добавете следния код към събитието FormClosed: GlobalDeleteAtom(GlobalFindAtom("jiaao_test")); Изтрий атомния "jiaao_test" --------------------------------------*-------*--------*----------------------------------------------- Горното е основната обща идея за създаване на взаимно изключваща се програма, и лично аз мисля, че първият метод е най-простият. |