Exportieren (0) Drucken
Alle erweitern

IAsyncResult-Schnittstelle

Aktualisiert: November 2007

Stellt den Status eines asynchronen Vorgangs dar.

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

[ComVisibleAttribute(true)]
public interface IAsyncResult
/** @attribute ComVisibleAttribute(true) */
public interface IAsyncResult
public interface IAsyncResult

Die IAsyncResult-Schnittstelle wird von Klassen implementiert, die Methoden enthalten, die asynchron arbeiten können. Dies ist der Rückgabetyp von Methoden, die einen asynchronen Vorgang initiieren, z. B. FileStream.BeginRead, und der Typ des dritten Parameters von Methoden, die einen asynchronen Vorgang abschließen, z. B. FileStream.EndRead. IAsyncResult-Objekte werden auch an Methoden übergeben, die beim Abschluss eines asynchronen Vorgangs von AsyncCallback-Delegaten aufgerufen werden.

In einem Objekt, das die IAsyncResult-Schnittstelle unterstützt, werden Zustandsinformationen bezüglich eines asynchronen Vorgangs gespeichert. Es stellt ein Synchronisierungsobjekt bereit, mit dem Threads die Beendigung eines Vorgangs signalisiert werden kann.

ft8a6455.alert_note(de-de,VS.90).gifHinweis:

Die AsyncResult-Klasse ist die Implementierung von IAsyncResult, die von der BeginInvoke-Methode zurückgegeben wird, wenn Sie eine Methode mithilfe eines Delegaten asynchron aufrufen.

Eine ausführliche Beschreibung der Verwendung der IAsyncResult-Schnittstelle finden Sie unter dem Thema Asynchrones Aufrufen von synchronen Methoden.

Im folgenden Beispiel wird veranschaulicht, wie mit der AsyncWaitHandle-Eigenschaft ein WaitHandle abgerufen und auf den asynchronen Aufruf eines Delegaten gewartet wird. Das WaitHandle wird bei Beendigung des asynchronen Aufrufs signalisiert, und durch Aufrufen der WaitOne-Methode kann darauf gewartet werden.

Das Beispiel besteht aus zwei Klassen: der Klasse mit der Methode, die asynchron aufgerufen wird, und der Klasse mit der aufrufenden Main-Methode.

Weitere Informationen und Beispiele zum asynchronen Aufrufen von Methoden mit Delegaten finden Sie unter Asynchrones Aufrufen von synchronen Methoden.

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


...


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);

            Thread.Sleep(0);
            Console.WriteLine("Main thread {0} does some work.",
                Thread.CurrentThread.ManagedThreadId);

            // Wait for the WaitHandle to become signaled.
            result.AsyncWaitHandle.WaitOne();

            // Perform additional processing here.
            // Call EndInvoke to retrieve the results.
            string returnValue = caller.EndInvoke(out threadId, result);

            // Close the wait handle.
            result.AsyncWaitHandle.Close();

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

/* This example produces output similar to the following:

Main thread 1 does some work.
Test method begins.
The call executed on thread 3, with return value "My call time was 3000.".
 */


Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Windows CE, Windows Mobile für Smartphone, Windows Mobile für Pocket PC, Xbox 360

.NET Framework und .NET Compact Framework unterstützen nicht alle Versionen sämtlicher Plattformen. Eine Liste der unterstützten Versionen finden Sie unter Systemanforderungen für .NET Framework.

.NET Framework

Unterstützt in: 3.5, 3.0, 2.0, 1.1, 1.0

.NET Compact Framework

Unterstützt in: 3.5, 2.0, 1.0

XNA Framework

Unterstützt in: 2.0, 1.0

Community-Beiträge

HINZUFÜGEN
Anzeigen:
© 2015 Microsoft