Dieser Artikel wurde manuell übersetzt. Bewegen Sie den Mauszeiger über die Sätze im Artikel, um den Originaltext anzuzeigen.
Übersetzung
Original
Dieser Artikel wurde noch nicht bewertet - Dieses Thema bewerten.

AsyncOperationManager.CreateOperation-Methode

Gibt für die Überwachung der Dauer eines bestimmten asynchronen Vorgangs eine System.ComponentModel.AsyncOperation zurück.

Namespace:  System.ComponentModel
Assembly:  System (in System.dll)
public static AsyncOperation CreateOperation(
	Object userSuppliedState
)

Parameter

userSuppliedState
Typ: System.Object
Ein Objekt, das dazu verwendet wird, einem bestimmten asynchronen Vorgang einen Bestandteil des Clientzustands, z. B. eine Aufgaben-ID, zuzuordnen.

Rückgabewert

Typ: System.ComponentModel.AsyncOperation
Eine AsyncOperation, die Sie verwenden können, um die Dauer eines asynchronen Methodenaufrufs zu verfolgen.

Die CreateOperation-Methode gibt eine System.ComponentModel.AsyncOperation zurück, die für die Überwachung der Dauer eines bestimmten asynchronen Vorgangs und für die Benachrichtigung des Anwendungsmodells verwendet werden kann, wenn der Vorgang abgeschlossen wurde. Dies dient auch der Versendung von Fortschrittsaktualisierungen und inkrementellen Ergebnissen, ohne dass der Vorgang beendet wird. Der System.ComponentModel.AsyncOperation marshallt diese Aufrufe des entsprechenden Threads oder Kontexts für das Anwendungsmodell ordnungsgemäß.

Wenn Sie eine Klasse implementieren, die das ereignisbasierte asynchrone Muster unterstützt, sollte Ihre Klasse immer CreateOperation aufrufen, wenn die MethodennameAsync-Methode aufgerufen wird. Die Clientanwendung, die Aufrufe der Methode durchführt, kann den userSuppliedState-Parameter verwenden, um die einzelnen Aufrufe eindeutig zu identifizieren, damit zwischen den Ereignissen unterschieden werden kann, die während des asynchronen Vorgangs ausgelöst werden.

Warnhinweis Vorsicht

Im Clientcode muss ein eindeutiger Wert für den userSuppliedState-Parameter enthalten sein. Nicht eindeutige Aufgaben-IDs können dazu führen, dass von der Implementierung falsch über Fortschritt und andere Ereignisse berichtet wird. Der Code sollte auf nicht eindeutige Aufgaben-IDs überprüft werden und eine System.ArgumentException auslösen, sofern eine solche erkannt wurde.

Der Code sollte jeden System.ComponentModel.AsyncOperation verfolgen, der von CreateOperation zurückgegeben wurde, und das Objekt im entsprechenden zugrunde liegenden asynchronen Vorgang zum Versenden von Updates und zum Abschließen des Vorgangs verwenden. Dieses Nachverfolgen kann so einfach sein wie das Übergeben der System.ComponentModel.AsyncOperation als Parameter an Delegaten. In ausgereifteren Entwürfen kann die Klasse eine Auflistung von System.ComponentModel.AsyncOperation-Objekten verwalten, indem sie zu Beginn von Aufgaben Objekte hinzufügt und diese bei Beendigung oder Abbruch wieder entfernt. Mit diesem Ansatz können Sie überprüfen, ob eindeutige userSuppliedState-Parameterwerte vorhanden sind. Diese Methode sollte bei der Verwendung von Klassen eingesetzt werden, die mehrere gleichzeitige Aufrufe unterstützen.

Weitere Informationen über das Implementieren von asynchronen Klassen finden Sie unter Implementieren des ereignisbasierten asynchronen Entwurfsmusters.

Im folgenden Codebeispiel wird anhand der CreateOperation-Methode veranschaulicht, wie eine System.ComponentModel.AsyncOperation zum Nachverfolgen der Dauer von asynchronen Vorgängen erstellt werden kann. Dieses Codebeispiel ist Teil eines umfangreicheren Beispiels für die 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", 
                "taskId");
        }

        userStateToLifetime[taskId] = asyncOp;
    }

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


.NET Framework

Unterstützt in: 4, 3.5, 3.0, 2.0

.NET Framework Client Profile

Unterstützt in: 4, 3.5 SP1

Windows 7, Windows Vista SP1 oder höher, Windows XP SP3, Windows XP SP2 x64 Edition, Windows Server 2008 (Server Core wird nicht unterstützt), Windows Server 2008 R2 (Server Core wird mit SP1 oder höher unterstützt), Windows Server 2003 SP2

.NET Framework unterstützt nicht alle Versionen sämtlicher Plattformen. Eine Liste der unterstützten Versionen finden Sie unter Systemanforderungen für .NET Framework.
Fanden Sie dies hilfreich?
(1500 verbleibende Zeichen)
Community-Inhalt Hinzufügen
Anmerkungen FAQ