Was this page helpful?
Your feedback about this content is important. Let us know what you think.
Additional feedback?
1500 characters remaining
Export (0) Print
Expand All

IAsyncResult::IsCompleted Property

Gets a value that indicates whether the asynchronous operation has completed.

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

property bool IsCompleted {
	bool get ();

Property Value

Type: System::Boolean
true if the operation is complete; otherwise, false.

When this property is true, you can assume it is safe to discard any resources you allocate for use by the asynchronous operation.

Notes to Implementers

Implementers will typically return the value of a private field or internal test as the value of this property.

Notes to Callers

Clients that poll for operation status (as opposed to waiting on a synchronization object) use this property to determine the status of the operation.

The following example shows how to use the IsCompleted property of the IAsyncResult to discover when an asynchronous call completes. In this case, the asynchronous call is made by using the BeginInvoke method of a delegate. You might use the IsCompleted property to poll for completion when making the asynchronous call from a thread that services the user interface. Polling for completion allows the calling thread to continue executing while the asynchronous call executes on a ThreadPool thread.

The example consists of two classes: the class that contains the method that is called asynchronously, and the class that contains the Main method that makes the call.

For more information and more examples of calling methods asynchronously by using delegates, see Calling Synchronous Methods Asynchronously.

using namespace System;
using namespace System::Threading;
using namespace System::Runtime::InteropServices; 

namespace Examples {
namespace AdvancedProgramming {
namespace AsynchronousOperations
    public ref class AsyncDemo 
        // The method to be executed asynchronously.
        String^ TestMethod(int callDuration, [OutAttribute] int% threadId) 
            Console::WriteLine("Test method begins.");
            threadId = Thread::CurrentThread->ManagedThreadId;
            return String::Format("My call time was {0}.", callDuration);

    // The delegate must have the same signature as the method 
    // it will call asynchronously. 
    public delegate String^ AsyncMethodCaller(int callDuration, [OutAttribute] int% threadId);


#using <TestMethod.dll>

using namespace System;
using namespace System::Threading;
using namespace Examples::AdvancedProgramming::AsynchronousOperations;

void main() 
    // The asynchronous method puts the thread id here. 
    int threadId;

    // Create an instance of the test class.
    AsyncDemo^ ad = gcnew AsyncDemo();

    // Create the delegate.
    AsyncMethodCaller^ caller = gcnew AsyncMethodCaller(ad, &AsyncDemo::TestMethod);

    // Initiate the asychronous call.
    IAsyncResult^ result = caller->BeginInvoke(3000, 
        threadId, nullptr, nullptr);

    // Poll while simulating work. 
    while(result->IsCompleted == false)

    // Call EndInvoke to retrieve the results.
    String^ returnValue = caller->EndInvoke(threadId, result);

    Console::WriteLine("\nThe call executed on thread {0}, with return value \"{1}\".",
        threadId, returnValue);

/* This example produces output similar to the following:

Test method begins.
The call executed on thread 3, with return value "My call time was 3000.".

.NET Framework

Supported in: 4.6, 4.5, 4, 3.5, 3.0, 2.0, 1.1

.NET Framework Client Profile

Supported in: 4, 3.5 SP1

XNA Framework

Supported in: 3.0, 2.0, 1.0

Portable Class Library

Supported in: Portable Class Library

Supported in: Windows Phone 8.1

Supported in: Windows Phone Silverlight 8.1

Supported in: Windows Phone Silverlight 8
© 2015 Microsoft