Αυτό το άρθρο είναι ένα άρθρο καθρέφτη της αυτόματης μετάφρασης, κάντε κλικ εδώ για να μεταβείτε στο αρχικό άρθρο.

Άποψη: 29278|Απάντηση: 2

[Πηγή] .net/c# Νήμα νήματος Αναστολή και συνέχιση παρωχημένων λύσεων

[Αντιγραφή συνδέσμου]
Δημοσιεύτηκε στις 17/5/2018 9:36:10 π.μ. | | | |
Το 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

Ειδοποιήστε ένα ή περισσότερα νήματα αναμονής ότι έχει συμβεί ένα συμβάν. Τέτοιοι τύποι δεν μπορούν να κληρονομηθούν.


Ο κωδικός δοκιμής έχει ως εξής:








Προηγούμενος:Η C# στέλνει μηνύματα κειμένου σε κινητά τηλέφωνα
Επόμενος:Η SQL αφαιρεί κενά από τα δεδομένα
 Σπιτονοικοκύρης| Δημοσιεύτηκε στις 17/5/2018 9:14:51 μ.μ. |
_event. set(); είναι να συνεχίσεις το νήμα
_event. Reset(); είναι να αναστείλει το νήμα
 Σπιτονοικοκύρης| Δημοσιεύτηκε στις 29/5/2018 2:58:49 μ.μ. |
Εάν λάβετε το αναγνωριστικό του τρέχοντος νήματος, χρησιμοποιήστε :

Thread.CurrentThread.ManagedThreadId.ToString() (συνιστάται)
Αποκήρυξη:
Όλο το λογισμικό, το υλικό προγραμματισμού ή τα άρθρα που δημοσιεύονται από το Code Farmer Network προορίζονται μόνο για μαθησιακούς και ερευνητικούς σκοπούς. Το παραπάνω περιεχόμενο δεν θα χρησιμοποιηθεί για εμπορικούς ή παράνομους σκοπούς, άλλως οι χρήστες θα υποστούν όλες τις συνέπειες. Οι πληροφορίες σε αυτόν τον ιστότοπο προέρχονται από το Διαδίκτυο και οι διαφορές πνευματικών δικαιωμάτων δεν έχουν καμία σχέση με αυτόν τον ιστότοπο. Πρέπει να διαγράψετε εντελώς το παραπάνω περιεχόμενο από τον υπολογιστή σας εντός 24 ωρών από τη λήψη. Εάν σας αρέσει το πρόγραμμα, υποστηρίξτε γνήσιο λογισμικό, αγοράστε εγγραφή και λάβετε καλύτερες γνήσιες υπηρεσίες. Εάν υπάρχει οποιαδήποτε παραβίαση, επικοινωνήστε μαζί μας μέσω email.

Mail To:help@itsvse.com