AsyncOperationManager.CreateOperation(Object) Methode

Definitie

Retourneert een AsyncOperation voor het bijhouden van de duur van een bepaalde asynchrone bewerking.

public:
 static System::ComponentModel::AsyncOperation ^ CreateOperation(System::Object ^ userSuppliedState);
public static System.ComponentModel.AsyncOperation CreateOperation(object userSuppliedState);
static member CreateOperation : obj -> System.ComponentModel.AsyncOperation
Public Shared Function CreateOperation (userSuppliedState As Object) As AsyncOperation

Parameters

userSuppliedState
Object

Een object dat wordt gebruikt om een deel van de clientstatus, zoals een taak-id, te koppelen aan een bepaalde asynchrone bewerking.

Retouren

Een AsyncOperation methode die u kunt gebruiken om de duur van een asynchrone aanroepmethode bij te houden.

Voorbeelden

In het volgende codevoorbeeld ziet u hoe u een CreateOperation methode gebruikt voor het bijhouden System.ComponentModel.AsyncOperation van de duur van asynchrone bewerkingen. Dit codevoorbeeld maakt deel uit van een groter voorbeeld voor de AsyncOperationManager klasse.

// 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",
                nameof(taskId));
        }

        userStateToLifetime[taskId] = asyncOp;
    }

    // Start the asynchronous operation.
    WorkerEventHandler workerDelegate = new(CalculateWorker);
    _ = workerDelegate.BeginInvoke(
        numberToTest,
        asyncOp,
        null,
        null);
}
' 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 Overridable Sub CalculatePrimeAsync( _
    ByVal numberToTest As Integer, _
    ByVal taskId As Object)

    ' Create an AsyncOperation for taskId.
    Dim asyncOp As AsyncOperation = _
        AsyncOperationManager.CreateOperation(taskId)

    ' Multiple threads will access the task dictionary,
    ' so it must be locked to serialize access.
    SyncLock userStateToLifetime.SyncRoot
        If userStateToLifetime.Contains(taskId) Then
            Throw New ArgumentException( _
                "Task ID parameter must be unique", _
                "taskId")
        End If

        userStateToLifetime(taskId) = asyncOp
    End SyncLock

    ' Start the asynchronous operation.
    Dim workerDelegate As New WorkerEventHandler( _
        AddressOf CalculateWorker)

    workerDelegate.BeginInvoke( _
        numberToTest, _
        asyncOp, _
        Nothing, _
        Nothing)

End Sub

Opmerkingen

De CreateOperation methode retourneert een System.ComponentModel.AsyncOperation methode die u kunt gebruiken om de duur van een bepaalde asynchrone bewerking bij te houden en om het toepassingsmodel te waarschuwen wanneer de bewerking is voltooid. U kunt deze ook gebruiken om voortgangsupdates en incrementele resultaten te posten zonder de bewerking te beëindigen. De System.ComponentModel.AsyncOperation correct marshal deze aanroepen naar de juiste thread of context voor het toepassingsmodel.

Als u een klasse implementeert die het Asynchrone patroon op basis van gebeurtenissen ondersteunt, moet uw klasse telkens aanroepen CreateOperation wanneer uw MethodName-methodeAsync wordt aangeroepen. De clienttoepassing die aanroepen naar de methode doet, kan de userSuppliedState parameter gebruiken om elke aanroep uniek te identificeren, zodat gebeurtenissen die zijn gegenereerd tijdens de uitvoering van de asynchrone bewerking, worden onderscheiden.

Caution

Clientcode moet een unieke waarde voor de userSuppliedState parameter opgeven. Niet-unieke taak-id's kunnen ertoe leiden dat uw implementatie de voortgang en andere gebeurtenissen onjuist rapporteert. Uw code moet controleren op een niet-unieke taak-id en een System.ArgumentException als deze wordt gedetecteerd.

Uw code moet elke System.ComponentModel.AsyncOperation geretourneerde code CreateOperation bijhouden en het object in de bijbehorende onderliggende asynchrone bewerking gebruiken om updates te posten en de bewerking te beëindigen. Dit bijhouden kan zo eenvoudig zijn als het doorgeven van de System.ComponentModel.AsyncOperation parameter als een parameter tussen gemachtigden. In geavanceerdere ontwerpen kan uw klas een verzameling System.ComponentModel.AsyncOperation objecten onderhouden, objecten toevoegen wanneer taken worden gestart en verwijderd wanneer taken zijn voltooid of geannuleerd. Met deze methode kunt u controleren op unieke userSuppliedState parameterwaarden. Dit is de methode die u moet gebruiken bij het werken met klassen die ondersteuning bieden voor meerdere gelijktijdige aanroepen.

Zie Het Asynchrone patroon op basis van gebeurtenissen implementeren voor meer informatie over het implementeren van asynchrone klassen.

Van toepassing op

Zie ook