Cet article est un article miroir de traduction automatique, veuillez cliquer ici pour accéder à l’article original.

Vue: 29278|Répondre: 2

[Source] Fil de fil .net/c# Suspendre et Reprendre solutions obsolètes

[Copié le lien]
Publié sur 17/05/2018 09:36:10 | | | |
Thread.Suspend a été déprécié.  Veuillez utiliser d’autres classes dans System.Threading, telles que Monitor, Mutex, Event et Semaphore, pour synchroniser les Threads ou protéger les ressources.  La connexion hyperlientérée est visible.
Thread.Resume a été déprécié.  Veuillez utiliser d’autres classes dans System.Threading, telles que Monitor, Mutex, Event et Semaphore, pour synchroniser les Threads ou protéger les ressources.  La connexion hyperlientérée est visible.
Si le fil veut mettre en pause ou continuer, j’ai déjà utilisé les deux méthodes de Suspendre et Reprendre, et j’utilise ces deux méthodes pour faire fonctionner le fil, ce qui est en fait problématique, et cela ne m’intéressait pas à l’époque, alors allons le sortir et l’étudier aujourd’hui !

Quel est le problème à utiliser les deux méthodes ci-dessus pour suspendre et continuer les threads ?

Par exemple, si nous appelons la méthode Suspend pour suspendre le thread, puis appelons immédiatement la méthode Resume pour continuer le thread suspendu, alors il peut y avoir un problème.

Parce qu’après avoir appelé la méthode Suspend pour suspendre le thread, le thread peut ne pas être suspendu immédiatement, ici cela prend du temps de traitement, à ce moment-là, vous appelez immédiatement la méthode Resume pour continuer le thread suspendu, et le programme se bloque immédiatement !

L’explication de Microsoft est la suivante :


N’utilisez pas les méthodes Suspendre et Reprendre pour synchroniser l’activité des threads. Y a-t-il un moyen de savoir ce qu’est le code lorsque vous mettez l’exécution du thread en pause ? Si vous maintenez un verrou lors de l’évaluation des privilèges de sécurité, d’autres threads de votre thread suspendu dans AppDomain peuvent être bloqués. Si vous suspendez d’autres threads dans l’AppDomain lors de l’exécution du constructeur de classe, les tentatives d’utilisation de la classe sont bloquées. Des blocages peuvent facilement survenir.

//
        Résumé:
        Continue le fil suspendu.
        //
        Anomalie :
        T :System.Threading.ThreadStateException :
        Le fil n’est pas lancé, mort ou n’est pas en attente.
        //
        T :System.Security.SecurityException :
        L’appelant ne dispose pas des permissions System.Security.SecurityPermissions.SecurityPermission appropriées.
        [Obsolète("Thread.Resume a été déprécié.  Veuillez utiliser d’autres classes dans System.Threading, telles que Monitor, Mutex, Event et Semaphore, pour synchroniser les Threads ou protéger les ressources.  La connexion hyperlientérée est visible.", faux)]
        [SécuritéSûreCritique]
        CV pour invalidité publique ;

Comment résoudre ce problème ?



Classe ManualResetEvent

Prévenez un ou plusieurs fils de discussion en attente qu’un événement a eu lieu. De tels types ne peuvent pas être hérités.


Le code de test est le suivant :








Précédent:C# envoie des messages texte sur les téléphones mobiles
Prochain:SQL supprime les espaces des données
 Propriétaire| Publié sur 17/05/2018 21:14:51 |
_event. Set() ; est de poursuivre le fil
_event. Reset() ; c’est de suspendre le fil
 Propriétaire| Publié sur 29/05/2018 14:58:49 |
Si vous obtenez l’identifiant du fil de discussion en cours, utilisez :

Thread.CurrentThread.ManagedThreadId.ToString() (recommandé)
Démenti:
Tous les logiciels, supports de programmation ou articles publiés par Code Farmer Network sont uniquement destinés à l’apprentissage et à la recherche ; Le contenu ci-dessus ne doit pas être utilisé à des fins commerciales ou illégales, sinon les utilisateurs assumeront toutes les conséquences. Les informations sur ce site proviennent d’Internet, et les litiges de droits d’auteur n’ont rien à voir avec ce site. Vous devez supprimer complètement le contenu ci-dessus de votre ordinateur dans les 24 heures suivant le téléchargement. Si vous aimez le programme, merci de soutenir un logiciel authentique, d’acheter l’immatriculation et d’obtenir de meilleurs services authentiques. En cas d’infraction, veuillez nous contacter par e-mail.

Mail To:help@itsvse.com