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

Изглед: 19013|Отговор: 0

[Източник] C# позволява правилното записване само на един екземпляр на приложението да се стартира

[Копирай линк]
Публикувано в 10.12.2016 г. 14:35:34 ч. | | |
C# програмите позволяват само една инстанция да изпълни правилния код
http://www.itsvse.com/thread-3391-1-1.html
(Източник: Архитект)


Кодът по-долу също е грешен!! Правилният код, както по-горе!!


Понякога трябва да позволим само един инстанс на приложението да работи, и когато процесът започне, ако установи, че дадена инстанция на приложението работи, то автоматично спира да работи. Обикновено го реализираме във функцията Main чрез Mutex mutex, който обикновено се записва следно:

Когато търсим отговори, често идваме и си отиваме бързо, игнорирайки характеристиките и предпазните мерки на Mutex. След прост тест, добре, вземи го и го използвай. На този етап пропускаме едно важно предварително условие:Конвенции за именуване на Mutex. Горният метод на писане работи без проблеми при един потребител; При мулти-потребителския режим всеки потребител може да стартира една инстанция, така че една екземпляр не може да бъде гарантиран.

Ако трябва да го използвате на терминален сървър и да позволите само една инстанция, използвайте следния метод:


Ето описанието на MSDN:


На сървъри, които работят с терминални услуги, нареченият системен мютекс може да има две нива на видимост. Ако името започва с префикса "Global\", мютексът е видим във всички сесии на терминалния сървър. Ако името започва с префикса "Local\", mutex-ът е видим само в сесията на терминалния сървър, който го е създал. В този случай всяка друга сесия на терминалния сървър на сървъра може да има отделен mutex със същото име. Ако създадете именуван mutex без да посочите префикс, той ще вземе префикса "Local\". В сесия на терминален сървър два мютекса с различни префикси на имена са независими мютекс, а двата мютекса са видими за всички процеси в сесията на терминалния сървър. Тоест, имената на префиксите "Global" и "Local" описват обхвата на името на mutex спрямо сесията на терминалния сървър, а не към самия процес.






Предишен:Регистрационните компоненти за COM интероп са засивени
Следващ:C# програмите позволяват само една инстанция да изпълни правилния код
Отричане:
Целият софтуер, програмни материали или статии, публикувани от Code Farmer Network, са само за учебни и изследователски цели; Горното съдържание не трябва да се използва за търговски или незаконни цели, в противен случай потребителите ще понесат всички последствия. Информацията на този сайт идва от интернет, а споровете за авторски права нямат нищо общо с този сайт. Трябва напълно да изтриете горното съдържание от компютъра си в рамките на 24 часа след изтеглянето. Ако ви харесва програмата, моля, подкрепете оригинален софтуер, купете регистрация и получете по-добри услуги. Ако има нарушение, моля, свържете се с нас по имейл.

Mail To:help@itsvse.com