Тази статия е огледална статия за машинен превод, моля, кликнете тук, за да преминете към оригиналната статия.

Изглед: 22992|Отговор: 2

[Източник] Подробно обяснение на няколко начина за решаване на проблема на C# програма, която позволява да се изпълнява само един екземпляр

[Копирай линк]
Публикувано в 8.12.2016 г. 13:11:13 ч. | | |

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




Предишен:Разлика между Directory.GetCurrentDirectory и Application.StartupPath
Следващ:Разликата между клиентския профил на .Net Framework4 и .Net Framework4.0
Публикувано в 10.07.2017 г. 6:31:21 ч. |
Благодаря, че споделихте
 Хазяин| Публикувано в 23.07.2024 г. 14:21:04 ч. |
C# програмите позволяват само една инстанция да изпълни правилния код
https://www.itsvse.com/thread-3391-1-1.html
Отричане:
Целият софтуер, програмни материали или статии, публикувани от Code Farmer Network, са само за учебни и изследователски цели; Горното съдържание не трябва да се използва за търговски или незаконни цели, в противен случай потребителите ще понесат всички последствия. Информацията на този сайт идва от интернет, а споровете за авторски права нямат нищо общо с този сайт. Трябва напълно да изтриете горното съдържание от компютъра си в рамките на 24 часа след изтеглянето. Ако ви харесва програмата, моля, подкрепете оригинален софтуер, купете регистрация и получете по-добри услуги. Ако има нарушение, моля, свържете се с нас по имейл.

Mail To:help@itsvse.com