Το Thread.Suspend έχει καταργηθεί. Χρησιμοποιήστε άλλες στο System.Threading, όπως Monitor, Mutex, Event και Semaphore, για να συγχρονίσετε τα νήματα ή να προστατέψετε πόρους. Η σύνδεση με υπερσύνδεσμο είναι ορατή. Το Thread.Resume έχει καταργηθεί. Χρησιμοποιήστε άλλες στο System.Threading, όπως Monitor, Mutex, Event και Semaphore, για να συγχρονίσετε τα νήματα ή να προστατέψετε πόρους. Η σύνδεση με υπερσύνδεσμο είναι ορατή. Εάν το νήμα θέλει να κάνει παύση ή να συνεχίσει, έχω χρησιμοποιήσει τις δύο μεθόδους Αναστολή και Συνέχιση στο παρελθόν και χρησιμοποιώ αυτές τις δύο μεθόδους για να λειτουργήσω το νήμα, κάτι που είναι πραγματικά προβληματικό και δεν με ένοιαζε εκείνη τη στιγμή, οπότε ας το βγάλουμε και ας το μελετήσουμε σήμερα!
Ποιο είναι το πρόβλημα με τη χρήση των δύο παραπάνω μεθόδων για την αναστολή και τη συνέχιση των νημάτων;
Για παράδειγμα, εάν καλέσουμε τη μέθοδο Αναστολή για να αναστείλουμε το νήμα και, στη συνέχεια, καλέσουμε αμέσως τη μέθοδο Συνέχιση για να συνεχίσουμε το νήμα που έχει ανασταλεί, τότε μπορεί να υπάρχει πρόβλημα.
Επειδή, αφού καλέσετε τη μέθοδο Αναστολή για να αναστείλετε το νήμα, το νήμα ενδέχεται να μην ανασταλεί αμέσως, εδώ χρειάζεται χρόνος επεξεργασίας, αυτή τη στιγμή, καλείτε αμέσως τη μέθοδο Συνέχιση για να συνεχίσετε το νήμα που έχει ανασταλεί και το πρόγραμμα θα κολλήσει αμέσως!
Η εξήγηση της Microsoft είναι:
Μην χρησιμοποιείτε τις μεθόδους αναστολής και συνέχισης για να συγχρονίσετε τη δραστηριότητα του νήματος. Υπάρχει τρόπος να μάθετε τι είναι ο κώδικας όταν διακόπτετε την εκτέλεση του νήματος. Εάν κρατάτε ένα κλείδωμα κατά την αξιολόγηση των προνομίων ασφαλείας, ενδέχεται να αποκλειστούν άλλα νήματα στο νήμα που έχει ανασταλεί στο AppDomain. Εάν αναστείλετε άλλα νήματα στο AppDomain κατά την εκτέλεση του κατασκευαστή κλάσης, οι προσπάθειες χρήσης της κλάσης αποκλείονται. Εύκολα μπορούν να προκύψουν αδιέξοδα.
// Περίληψη: Συνεχίστε το αιωρούμενο νήμα. // Ανωμαλία: T:System.Threading.ThreadStateException: Το νήμα δεν έχει ξεκινήσει, είναι νεκρό ή δεν βρίσκεται σε κατάσταση εκκρεμότητας. // T:System.Security.SecurityException: Ο καλών δεν διαθέτει το κατάλληλο System.Security.Permissions.SecurityPermission. [Απαρχαιωμένο("Το Thread.Resume έχει καταργηθεί. Χρησιμοποιήστε άλλες στο System.Threading, όπως Monitor, Mutex, Event και Semaphore, για να συγχρονίσετε τα νήματα ή να προστατέψετε πόρους. Η σύνδεση με υπερσύνδεσμο είναι ορατή.", false)] [ΑσφάλειαΑσφαλήςΚρίσιμη] δημόσιο κενό Βιογραφικό(); Πώς να λύσετε αυτό το πρόβλημα;
Κλάση ManualResetEvent
Ειδοποιήστε ένα ή περισσότερα νήματα αναμονής ότι έχει συμβεί ένα συμβάν. Τέτοιοι τύποι δεν μπορούν να κληρονομηθούν.
Ο κωδικός δοκιμής έχει ως εξής:
|