IAsyncResult.IsCompleted Eigenschaft

Definition

Ruft einen Wert ab, der angibt, ob der asynchrone Vorgang abgeschlossen wurde.Gets a value that indicates whether the asynchronous operation has completed.

public:
 property bool IsCompleted { bool get(); };
public bool IsCompleted { get; }
member this.IsCompleted : bool
Public ReadOnly Property IsCompleted As Boolean

Eigenschaftswert

true, wenn der Vorgang abgeschlossen ist, andernfalls false.true if the operation is complete; otherwise, false.

Beispiele

Im folgenden Beispiel wird gezeigt, wie die IsCompleted -Eigenschaft IAsyncResult von verwendet wird, um zu ermitteln, wann ein asynchroner-Vorgang abgeschlossen wird.The following example shows how to use the IsCompleted property of the IAsyncResult to discover when an asynchronous call completes. In diesem Fall wird der asynchrone Aufruf mithilfe der BeginInvoke -Methode eines Delegaten durchgeführt.In this case, the asynchronous call is made by using the BeginInvoke method of a delegate. Sie können die IsCompleted -Eigenschaft verwenden, um die Vervollständigung abzufragen, wenn Sie den asynchronen Aufrufs von einem Thread ausführen, der die Benutzeroberfläche nutzt.You might use the IsCompleted property to poll for completion when making the asynchronous call from a thread that services the user interface. Durch das Abrufen der Beendigung kann die Verarbeitung vom aufrufenden Thread fortgesetzt werden, während der asynchrone Aufruf für einen ThreadPool -Thread ausgeführt wird.Polling for completion allows the calling thread to continue executing while the asynchronous call executes on a ThreadPool thread.

Das Beispiel besteht aus zwei Klassen: der-Klasse, die die Methode enthält, die asynchron aufgerufen wird, und der- Main Klasse, die die Methode enthält, die den Aufruf durchführt.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.

Weitere Informationen und weitere Beispiele zum asynchronen Aufrufen von Methoden mithilfe von Delegaten finden Sie unter Asynchrones Aufrufen synchroner Methoden.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 
    {
    public:
        // The method to be executed asynchronously.
        String^ TestMethod(int callDuration, [OutAttribute] int% threadId) 
        {
            Console::WriteLine("Test method begins.");
            Thread::Sleep(callDuration);
            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 System;
using System.Threading; 

namespace Examples.AdvancedProgramming.AsynchronousOperations
{
    public class AsyncDemo 
    {
        // The method to be executed asynchronously.
        public string TestMethod(int callDuration, out int threadId) 
        {
            Console.WriteLine("Test method begins.");
            Thread.Sleep(callDuration);
            threadId = Thread.CurrentThread.ManagedThreadId;
            return String.Format("My call time was {0}.", callDuration.ToString());
        }
    }
    // The delegate must have the same signature as the method
    // it will call asynchronously.
    public delegate string AsyncMethodCaller(int callDuration, out int threadId);
}
Imports System.Threading
Imports System.Runtime.InteropServices 

Namespace Examples.AdvancedProgramming.AsynchronousOperations
    Public Class AsyncDemo 
        ' The method to be executed asynchronously.
        Public Function TestMethod(ByVal callDuration As Integer, _
                <Out> ByRef threadId As Integer) As String
            Console.WriteLine("Test method begins.")
            Thread.Sleep(callDuration)
            threadId = Thread.CurrentThread.ManagedThreadId()
            return String.Format("My call time was {0}.", callDuration.ToString())
        End Function
    End Class

    ' The delegate must have the same signature as the method
    ' it will call asynchronously.
    Public Delegate Function AsyncMethodCaller(ByVal callDuration As Integer, _
        <Out> ByRef threadId As Integer) As String
End Namespace
#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)
    {
        Thread::Sleep(250);
        Console::Write(".");
    }

    // 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.".
 */
using System;
using System.Threading;

namespace Examples.AdvancedProgramming.AsynchronousOperations
{
    public class AsyncMain 
    {
        static void Main() {
            // The asynchronous method puts the thread id here.
            int threadId;

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

            // Create the delegate.
            AsyncMethodCaller caller = new AsyncMethodCaller(ad.TestMethod);
       
            // Initiate the asychronous call.
            IAsyncResult result = caller.BeginInvoke(3000, 
                out threadId, null, null);

            // Poll while simulating work.
            while(result.IsCompleted == false) {
                Thread.Sleep(250);
                Console.Write(".");
            }

            // Call EndInvoke to retrieve the results.
            string returnValue = caller.EndInvoke(out 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.".
 */
Imports System.Threading
Imports System.Runtime.InteropServices 

Namespace Examples.AdvancedProgramming.AsynchronousOperations

    Public Class AsyncMain 
        Shared Sub Main() 
            ' The asynchronous method puts the thread id here.
            Dim threadId As Integer

            ' Create an instance of the test class.
            Dim ad As New AsyncDemo()

            ' Create the delegate.
            Dim caller As New AsyncMethodCaller(AddressOf ad.TestMethod)
       
            ' Initiate the asynchronous call.
            Dim result As IAsyncResult = caller.BeginInvoke(3000, _
                threadId, Nothing, Nothing)

            ' Poll while simulating work.
            While result.IsCompleted = False
                Thread.Sleep(250)
                Console.Write(".")
            End While

            ' Call EndInvoke to retrieve the results.
            Dim returnValue As String = caller.EndInvoke(threadId, result)

            Console.WriteLine(vbCrLf & _
                "The call executed on thread {0}, with return value ""{1}"".", _
                threadId, returnValue)
        End Sub
    End Class
End Namespace

' 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.".

Hinweise

Wenn diese Eigenschaft ist true, können Sie davon ausgehen, dass es sicher ist, alle Ressourcen zu verwerfen, die Sie für die Verwendung durch den asynchronen Vorgang zuordnen.When this property is true, you can assume it is safe to discard any resources you allocate for use by the asynchronous operation.

Hinweise für Ausführende

Implementierer geben in der Regel den Wert eines privaten Felds oder internen Tests als Wert dieser Eigenschaft zurück.Implementers will typically return the value of a private field or internal test as the value of this property.

Hinweise für Aufrufer

Clients, die den Vorgangs Statusabfragen (im Gegensatz zum warten auf ein Synchronisierungs Objekt) verwenden diese Eigenschaft, um den Status des Vorgangs zu bestimmen.Clients that poll for operation status (as opposed to waiting on a synchronization object) use this property to determine the status of the operation.

Gilt für: