Метод 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(рядок lpString); Додати атоми [System.Runtime.InteropServices.DllImport("kernel32.dll")] публічний статичний зовнішній UInt32 GlobalFindAtom(рядок lpString); Знайти атоми [System.Runtime.InteropServices.DllImport("kernel32.dll")] публічний статичний зовнішній UInt32 GlobalDeleteAtom(UInt32 nAtom); Видалити атоми 2. Модифікувати функцію Main() наступним чином:
3. Додайте наступний код до події FormClosed: GlobalDeleteAtom(GlobalFindAtom("jiaao_test")); Видалити атомний «jiaao_test» --------------------------------------*-------*--------*----------------------------------------------- Вищезазначене — це базова загальна ідея створення взаємовиключної програми, і я особисто вважаю, що перший метод є найпростішим. |