Метод 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» --------------------------------------*-------*--------*----------------------------------------------- Вышеописанное — основная общая идея создания взаимоисключающей программы, и лично я считаю, что первый метод — самый простой. |