Pour afficher l’article en anglais, activez la case d’option Anglais. Vous pouvez aussi afficher la version anglaise dans une fenêtre contextuelle en faisant glisser le pointeur de la souris sur le texte.
Traduction
Anglais
Cette documentation est archivée et n’est pas conservée.

AsyncOperationManager, classe

Fournit la gestion de l'accès concurrentiel pour les classes qui prennent en charge des appels de méthode asynchrone. Cette classe ne peut pas être héritée.

System.Object
  System.ComponentModel.AsyncOperationManager

Espace de noms :  System.ComponentModel
Assembly :  System (dans System.dll)

[HostProtectionAttribute(SecurityAction.LinkDemand, SharedState = true)]
public static class AsyncOperationManager

Le type AsyncOperationManager expose les membres suivants.

  NomDescription
Propriété publiqueMembre statiqueSynchronizationContextObtient ou définit le contexte de synchronisation pour l'opération asynchrone.
Début

  NomDescription
Méthode publiqueMembre statiqueCreateOperationRetourne System.ComponentModel.AsyncOperation permettant de suivre la durée d'une opération asynchrone particulière.
Début

Si votre classe doit fournir un comportement asynchrone en fonction du Vue d'ensemble du modèle asynchrone basé sur des événements, vous rencontrerez un certain nombre de problèmes liés à la gestion de l'accès concurrentiel. Un de ces problèmes est de garantir que les gestionnaires d'événements sont appelés sur un thread ou un contexte qui est approprié pour le modèle d'application (par exemple, les applications Windows Forms, les applications ASP.NET, les applications console, etc.). AsyncOperationManager offre un moyen pratique de créer une classe qui s'exécute correctement sur tous les modèles d'application pris en charge par le .NET Framework.

La classe AsyncOperationManager possède une méthode, CreateOperation qui retourne System.ComponentModel.AsyncOperation qui peut être utilisé pour suivre la durée d'une tâche asynchrone particulière. System.ComponentModel.AsyncOperation pour une tâche peut être utilisé pour alerter des clients lorsqu'une tâche est terminée. Il peut être utilisé également pour publier des mises à jour de progression et des résultats incrémentiels sans terminer l'opération.

Pour plus d'informations sur l'implémentation de classes asynchrones, consultez Implémentation du modèle asynchrone basé sur des événements.

RemarqueRemarque

L'attribut HostProtectionAttribute appliqué à ce type ou membre a la valeur de propriété Resources suivante : SharedState. HostProtectionAttribute n'affecte pas les applications bureautiques (qui sont généralement démarrées en double-cliquant sur une icône, en tapant une commande ou en entrant une URL dans un navigateur). Pour plus d'informations, consultez la classe HostProtectionAttribute ou Attributs de programmation et de protection des hôtes SQL Server.

L'exemple de code suivant montre l'utilisation de la classe AsyncOperationManager pour créer une classe qui prend en charge des opérations asynchrones pour tout modèle d'application. Il montre comment implémenter une classe qui teste un nombre pour déterminer s'il est premier. Ce calcul peut prendre du temps, c'est pourquoi il a lieu sur un thread séparé. Les rapports de progression, les résultats incrémentiels et les notifications de fin d'exécution sont traités par la classe AsyncOperation qui garantit que les gestionnaires d'événements du client sont appelés sur le thread ou le contexte approprié.

Pour obtenir l'intégralité du code, consultez Comment : implémenter un composant qui prend en charge le modèle asynchrone basé sur des événements. Pour obtenir l'intégralité du code d'un formulaire client, consultez Comment : implémenter un client du modèle asynchrone basé sur des événements.


// This method starts an asynchronous calculation. 
// First, it checks the supplied task ID for uniqueness.
// If taskId is unique, it creates a new WorkerEventHandler 
// and calls its BeginInvoke method to start the calculation.
public virtual void CalculatePrimeAsync(
    int numberToTest,
    object taskId)
{
    // Create an AsyncOperation for taskId.
    AsyncOperation asyncOp =
        AsyncOperationManager.CreateOperation(taskId);

    // Multiple threads will access the task dictionary,
    // so it must be locked to serialize access.
    lock (userStateToLifetime.SyncRoot)
    {
        if (userStateToLifetime.Contains(taskId))
        {
            throw new ArgumentException(
                "Task ID parameter must be unique", 
                "taskId");
        }

        userStateToLifetime[taskId] = asyncOp;
    }

    // Start the asynchronous operation.
    WorkerEventHandler workerDelegate = new WorkerEventHandler(CalculateWorker);
    workerDelegate.BeginInvoke(
        numberToTest,
        asyncOp,
        null,
        null);
}


.NET Framework

Pris en charge dans : 4, 3.5, 3.0, 2.0

.NET Framework Client Profile

Pris en charge dans : 4, 3.5 SP1

Windows 7, Windows Vista SP1 ou ultérieur, Windows XP SP3, Windows XP SP2 Édition x64, Windows Server 2008 (installation minimale non prise en charge), Windows Server 2008 R2 (installation minimale prise en charge avec SP1 ou version ultérieure), Windows Server 2003 SP2

Le .NET Framework ne prend pas en charge toutes les versions de chaque plateforme. Pour obtenir la liste des versions prises en charge, consultez Configuration requise du .NET Framework.

Tous les membres static (Shared en Visual Basic) publics de ce type sont thread-safe. Il n'est pas garanti que les membres d'instance soient thread-safe.
Afficher: