Wątek.Zawieszenie zostało wycofane z eksploatacji. Prosimy o używanie innych klas w System.Threading, takich jak Monitor, Mutex, Event i Semaphore, aby synchronizować wątki lub chronić zasoby. Logowanie do linku jest widoczne. Wątek. Resume zostało wycofane. Prosimy o używanie innych klas w System.Threading, takich jak Monitor, Mutex, Event i Semaphore, aby synchronizować wątki lub chronić zasoby. Logowanie do linku jest widoczne. Jeśli wątek chce się zatrzymać lub kontynuować, korzystałem już z dwóch metod: Suspend i Resume, i używam tych dwóch metod do obsługi wątku, co jest problematyczne, a wtedy mnie to nie obchodziło, więc wyjmijmy to i przestudiujmy dzisiaj!
Jaki jest problem z używaniem powyższych dwóch metod do zawieszania i kontynuowania wątków?
Na przykład, jeśli wywołamy metodę Suspend, aby zawiesić wątek, a następnie natychmiast wywołamy metodę Resume, aby kontynuować wątek zawieszony, może pojawić się problem.
Ponieważ po wywołaniu metody Suspend w celu zawieszenia wątku, wątek może nie zostać zawieszony od razu, tutaj zajmuje to czas przetwarzania, wtedy natychmiast wywołujesz metodę Resume, aby kontynuować wątek zawieszony, a program natychmiast się zawiesza!
Wyjaśnienie Microsoftu jest następujące:
Nie używaj metod Suspend i Resume do synchronizacji aktywności wątków. Czy jest sposób, aby dowiedzieć się, czym jest kod, gdy wstrzymasz wykonanie wątku? Jeśli podczas oceny uprawnień bezpieczeństwa przytrzymasz blokadę, inne wątki w twoim zawieszonym wątku w AppDomain mogą zostać zablokowane. Jeśli zawiesz inne wątki w AppDomain podczas wykonywania konstruktora klasy, próby użycia klasy są blokowane. Łatwo mogą wystąpić impasy.
// Streszczenie: Kontynuuj wątek zawieszony. // Anomalia: T:System.Threading.ThreadStateException: Wątek nie jest rozpoczęty, martwy ani nie znajduje się w stanie oczekującym. // T:System.Security.SecurityException: Dzwoniący nie posiada właściwego System.Security.Permissions.SecurityPermission. [Przestarzałe("Wątek.CV zostało wycofane. Prosimy o używanie innych klas w System.Threading, takich jak Monitor, Mutex, Event i Semaphore, aby synchronizować wątki lub chronić zasoby. Logowanie do linku jest widoczne.", fałszywe)] [BezpieczeństwoKrytyczne] public void Resume(); Jak rozwiązać ten problem?
Klasa ManualResetEvent
Powiadom jeden lub więcej wątków oczekujących o zdarzeniu. Takich typów nie można dziedziczyć.
Kod testu jest następujący:
|