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
Уведомете една или повече чакащи нишки, че е настъпило събитие. Такива видове не могат да бъдат наследени.
Тестовият код е следният:
|