AsyncOperationManager.CreateOperation(Object) Metódus

Definíció

AsyncOperation Egy adott aszinkron művelet időtartamának nyomon követésére szolgáló értéket ad vissza.

public:
 static System::ComponentModel::AsyncOperation ^ CreateOperation(System::Object ^ userSuppliedState);
public static System.ComponentModel.AsyncOperation CreateOperation(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

Paraméterek

userSuppliedState
Object

Egy objektum, amely egy ügyfélállapot egy részét, például egy tevékenységazonosítót társít egy adott aszinkron művelethez.

Válaszok

Egy AsyncOperation aszinkron metódushívás időtartamának nyomon követésére használható.

Példák

Az alábbi példakód bemutatja, CreateOperation hogyan hozhat létre egy System.ComponentModel.AsyncOperation aszinkron műveletek időtartamának nyomon követésére szolgáló módszert. Ez a példakód egy nagyobb, az AsyncOperationManager osztályhoz tartozó példa része.

// 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

Megjegyzések

A CreateOperation metódus egy System.ComponentModel.AsyncOperation adott aszinkron művelet időtartamának nyomon követésére és az alkalmazásmodell riasztására használható, amikor a művelet befejeződik. A művelet leállítása nélkül is közzéteheti az előrehaladási frissítéseket és a növekményes eredményeket. A System.ComponentModel.AsyncOperation rendszer helyesen telepíti ezeket a hívásokat az alkalmazásmodell megfelelő szálára vagy környezetére.

Ha olyan osztályt implementál, amely támogatja az eseményalapú aszinkron mintát, az osztálynak minden alkalommal meg kell hívnia CreateOperation a MethodNameAsync metódust. A metódusra irányuló hívásokat kezdeményező ügyfélalkalmazás a userSuppliedState paraméterrel egyedileg azonosíthatja az egyes hívásokat, hogy meg lehessen különböztetni az aszinkron művelet végrehajtása során felmerülő eseményeket.

Figyelmeztetés

Az ügyfélkódnak egyedi értéket kell adnia a userSuppliedState paraméterhez. A nem egyedi feladatazonosítók miatt előfordulhat, hogy a megvalósítás helytelenül jelenti az előrehaladást és más eseményeket. A kódnak meg kell keresnie egy nem egyedi tevékenységazonosítót, és ha észleli a rendszer, adjon meg egy System.ArgumentException hibát.

A kódnak nyomon kell követnie az összes System.ComponentModel.AsyncOperation visszaadott CreateOperation hibát, és az objektumot a megfelelő mögöttes aszinkron műveletben kell használnia a frissítések közzétételéhez és a művelet leállításához. Ez a nyomon követés olyan egyszerű lehet, mint a paraméter átadása a System.ComponentModel.AsyncOperation meghatalmazottak között. Kifinomultabb kialakítás esetén az osztály megtarthatja az objektumok gyűjteményét System.ComponentModel.AsyncOperation , objektumokat adhat hozzá a tevékenységek indításakor, és eltávolíthatja őket a tevékenységek befejezésekor vagy megszakításakor. Ez a módszer lehetővé teszi egyedi paraméterértékek keresését userSuppliedState , és ezt a módszert kell használnia több egyidejű meghívást támogató osztályok használatakor.

Az aszinkron osztályok implementálásával kapcsolatos további információkért lásd az eseményalapú aszinkron minta implementálását.

A következőre érvényes:

Lásd még