AsyncOperationManager.CreateOperation(Object) Metodo

Definizione

Restituisce un oggetto AsyncOperation per rilevare la durata di una particolare operazione asincrona.

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

Parametri

userSuppliedState
Object

Oggetto utilizzato per associare informazioni sullo stato del client, ad esempio un ID attività, a un'operazione asincrona specifica.

Restituisce

Un oggetto AsyncOperation utilizzabile per tenere traccia della durata di una chiamata asincrona a un metodo.

Esempio

Nell'esempio di codice seguente viene illustrato l'uso del CreateOperation metodo per creare un System.ComponentModel.AsyncOperation oggetto per tenere traccia della durata delle operazioni asincrone. Questo esempio di codice fa parte di un esempio più grande fornito per la AsyncOperationManager classe.

// 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);
}
' 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

Commenti

Il CreateOperation metodo restituisce un System.ComponentModel.AsyncOperation oggetto che è possibile usare per tenere traccia della durata di un'operazione asincrona specifica e per avvisare il modello dell'applicazione al termine dell'operazione. È anche possibile usarlo per pubblicare gli aggiornamenti di stato e i risultati incrementali senza terminare l'operazione. Il System.ComponentModel.AsyncOperation marshalling di queste chiamate verrà eseguito correttamente nel thread o nel contesto appropriato per il modello di applicazione.

Se si implementa una classe che supporta il modello asincrono basato su eventi, la classe deve chiamare CreateOperation ogni volta che viene chiamato il metodo MethodNameAsync . L'applicazione client che effettua chiamate al metodo può usare il userSuppliedState parametro per identificare in modo univoco ogni chiamata, in modo da distinguere gli eventi generati durante l'esecuzione dell'operazione asincrona.

Attenzione

Il codice client deve fornire un valore univoco per il userSuppliedState parametro. Gli ID attività non univoci possono causare l'implementazione di segnalare lo stato di avanzamento e altri eventi in modo errato. Il codice deve verificare la presenza di un ID attività non univoco e generare un valore System.ArgumentException se viene rilevato.

Il codice deve tenere traccia di ogni System.ComponentModel.AsyncOperation oggetto restituito da CreateOperation e usare l'oggetto nell'operazione asincrona sottostante corrispondente per pubblicare gli aggiornamenti e terminare l'operazione. Questo rilevamento può essere semplice come passare come System.ComponentModel.AsyncOperation parametro tra delegati. Nelle progettazioni più sofisticate, la classe può mantenere una raccolta di System.ComponentModel.AsyncOperation oggetti, aggiungendo oggetti all'avvio e rimuovendoli al termine o annullati delle attività. Questo approccio consente di verificare la presenza di valori di parametro univoci userSuppliedState ed è il metodo che è consigliabile usare quando si usano classi che supportano più chiamate simultanee.

Per altre informazioni sull'implementazione di classi asincrone, vedere Implementazione del modello asincrono basato su eventi.

Si applica a

Vedi anche