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

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

[Източник] .net/c# Thread thread Suspend and Resume на остарели решения

[Копирай линк]
Публикувано в 17.05.2018 г. 9:36:10 ч. | | | |
Thread.Suspend е остарял.  Моля, използвайте други класове в System.Threading, като Monitor, Mutex, Event и Semaphore, за синхронизиране на нишки или защита на ресурси.  Входът към хиперлинк е видим.
Thread.Resume е остаряла.  Моля, използвайте други класове в System.Threading, като Monitor, Mutex, Event и Semaphore, за синхронизиране на нишки или защита на ресурси.  Входът към хиперлинк е видим.
Ако темата иска да спре или продължи, вече съм използвал двата метода – Suspend и Resume, и използвам тези два метода за управление на нишката, което всъщност е проблематично и тогава не ми пукаше, така че нека го извадим и да го изучим днес!

Какъв е проблемът с използването на горните два метода за спиране и продължаване на нишките?

Например, ако извикаме метода Suspend, за да суспендира нишката, а след това веднага извикаме метода Resume, за да продължи спряната нишка, тогава може да възникне проблем.

Защото, след като извикаш метода Suspend, за да спреш нишката, нишката може да не бъде спряна веднага, тук отнема време за обработка, в този момент веднага извикваш метода Възобновяване, за да продължиш спряната нишка, и програмата ще замръзне веднага!

Обяснението на Microsoft е:


Не използвайте методите Suspend и Resume за синхронизиране на активността на нишките. Има ли начин да се разбере какъв код е при пауза на изпълнението на нишката? Ако държите заключване по време на оценка на правата за сигурност, други нишки във вашия замразен thread в AppDomain може да бъдат блокирани. Ако спрете други нишки в AppDomain при изпълнение на конструктора на класове, опитите за използване на класа се блокират. Задънявени ситуации могат лесно да възникнат.

//
        Резюме:
        Продължете окачената тема.
        //
        Аномалия:
        T:System.Threading.ThreadStateException:
        Темата не е стартирана, не е мъртва или не е в чакащо състояние.
        //
        T:System.Security.SecurityException:
        Обаждащият се няма подходящите System.Security.Permissions.SecurityPermissions.
        [Остаряла("Thread.Resume е остаряла.  Моля, използвайте други класове в System.Threading, като Monitor, Mutex, Event и Semaphore, за синхронизиране на нишки или защита на ресурси.  Входът към хиперлинк е видим.", false)]
        [СигурностБезопасностКритична]
        публично невалидно резюме();

Как да решим този проблем?



Клас ManualResetEvent

Уведомете една или повече чакащи нишки, че е настъпило събитие. Такива видове не могат да бъдат наследени.


Тестовият код е следният:








Предишен:C# изпраща текстови съобщения на мобилни телефони
Следващ:SQL премахва пространствата от данните
 Хазяин| Публикувано в 17.05.2018 г. 21:14:51 ч. |
_event. Set(); е да продължи нишката
_event. Reset(); е да суспендира нишката
 Хазяин| Публикувано в 29.05.2018 г. 14:58:49 ч. |
Ако получите ID на текущата тема, използвайте :

Thread.CurrentThread.ManagedThreadId.ToString() (препоръчително)
Отричане:
Целият софтуер, програмни материали или статии, публикувани от Code Farmer Network, са само за учебни и изследователски цели; Горното съдържание не трябва да се използва за търговски или незаконни цели, в противен случай потребителите ще понесат всички последствия. Информацията на този сайт идва от интернет, а споровете за авторски права нямат нищо общо с този сайт. Трябва напълно да изтриете горното съдържание от компютъра си в рамките на 24 часа след изтеглянето. Ако ви харесва програмата, моля, подкрепете оригинален софтуер, купете регистрация и получете по-добри услуги. Ако има нарушение, моля, свържете се с нас по имейл.

Mail To:help@itsvse.com