Поделиться через


AsyncOperation.PostOperationCompleted Method

Microsoft Silverlight will reach end of support after October 2021. Learn more.

Ends the lifetime of an asynchronous operation.

Namespace:  System.ComponentModel
Assembly:  System (in System.dll)

Syntax

'Declaration
Public Sub PostOperationCompleted ( _
    d As SendOrPostCallback, _
    arg As Object _
)
public void PostOperationCompleted(
    SendOrPostCallback d,
    Object arg
)

Parameters

  • arg
    Type: System.Object
    An argument for the delegate that is contained in the d parameter.

Exceptions

Exception Condition
InvalidOperationException

The OperationCompleted method has been called previously for this task.

ArgumentNullException

d is nulla null reference (Nothing in Visual Basic).

Remarks

Call the PostOperationCompleted method to end the lifetime of an asynchronous operation. After this method is called for a particular task, calls to its corresponding AsyncOperation object will raise an exception.

The d parameter wraps the delegate you want your class to call when the task's lifetime ends because of completion, cancellation, or failure of the task. The AsyncOperation object will make sure that your delegate is invoked on the thread or context appropriate for the application model. Your delegate can optionally raise an event that notifies clients that the asynchronous task's lifetime has ended.

The arg parameter is used to pass state information to the completion delegate d. You can use an AsyncOperation object, or an System.ComponentModel.AsyncCompletedEventArgs object as the parameter value. Alternatively, if you want to provide additional state storage, you can use an instance of a class you derive from the System.ComponentModel.AsyncCompletedEventArgs class.

Notes to Inheritors

Inheritors must make the PostOperationCompleted invocation asynchronous, so that class library providers do not need to concern themselves with potential stack overflows if they assume asynchrony but a particular application model happens to be synchronous. The method should be interpreted as an "ending the lifetime" call, meaning the implementation needs to do what is appropriate for the application model. For instance, ASP.NET will decrement its count of outstanding asynchronous operations. This should also make sure that any subsequent calls into the operation will fail, since it has now completed.

For more information about how to implement asynchronous classes, see Implementing the Event-based Asynchronous Pattern in the .NET Framework documentation.

Examples

The following code example demonstrates how to use the PostOperationCompleted method to end the lifetime of an asynchronous operation. This code example is part of a larger example provided for the System.ComponentModel.AsyncOperationManager class.

' Report completion by raising the Completed event. 
Dim completedEventArgs As _
    New GetPersonsCompletedEventArgs _
        (personList, _
         exception, _
         canceled, _
         asyncOperation.UserSuppliedState)

asyncOperation.PostOperationCompleted _
    (AsyncOpCompletedHandler, completedEventArgs)
// Report completion by raising the Completed event.
GetPersonsCompletedEventArgs completedEventArgs =
    new GetPersonsCompletedEventArgs(
        personList,
        exception,
        canceled,
        asyncOperation.UserSuppliedState);

asyncOperation.PostOperationCompleted
    (AsyncOpCompletedHandler, completedEventArgs);

Version Information

Silverlight

Supported in: 5, 4, 3

Silverlight for Windows Phone

Supported in: Windows Phone OS 7.1, Windows Phone OS 7.0

XNA Framework

Supported in: Xbox 360, Windows Phone OS 7.0

Platforms

For a list of the operating systems and browsers that are supported by Silverlight, see Supported Operating Systems and Browsers.