AsyncCallback Delegado
Collapse the table of content
Expand the table of content
Este artículo se tradujo automáticamente. Para ver el artículo en inglés, active la casilla Inglés. Además, puede mostrar el texto en inglés en una ventana emergente si mueve el puntero del mouse sobre el texto.

AsyncCallback (Delegado)


Hace referencia a un método que se va a llamar cuando finalice una operación asincrónica correspondiente.

Espacio de nombres:   System
Ensamblado:  mscorlib (en mscorlib.dll)

public delegate void AsyncCallback(
	IAsyncResult ar



Resultado de la operación asincrónica.

Use an AsyncCallback delegate to process the results of an asynchronous operation in a separate thread.The AsyncCallback delegate represents a callback method that is called when the asynchronous operation completes.The callback method takes an IAsyncResult parameter, which is subsequently used to obtain the results of the asynchronous operation.

For more information about asynchronous programming, see 使用 AsyncCallback 委托结束异步操作 and Using an AsyncCallback Delegate and State Object in Event-based Asynchronous Pattern (EAP).

The following code example demonstrates using asynchronous methods in the Dns class to retrieve Domain Name System (DNS) information for user-specified computers.This example creates an AsyncCallback delegate that references the ProcessDnsInformation method.This method is called once for each asynchronous request for DNS information.

The following example demonstrates using asynchronous methods to
get Domain Name System information for the specified host computers.
This example uses a delegate to obtain the results of each asynchronous 

using System;
using System.Net;
using System.Net.Sockets;
using System.Threading;
using System.Collections.Specialized;
using System.Collections;

namespace Examples.AdvancedProgramming.AsynchronousOperations
    public class UseDelegateForAsyncCallback
        static int requestCounter;
        static ArrayList hostData = new ArrayList();
        static StringCollection hostNames = new StringCollection();
        static void UpdateUserInterface()
            // Print a message to indicate that the application
            // is still working on the remaining requests.
            Console.WriteLine("{0} requests remaining.", requestCounter);
        public static void Main()
            // Create the delegate that will process the results of the 
            // asynchronous request.
            AsyncCallback callBack = new AsyncCallback(ProcessDnsInformation);
            string host;
                Console.Write(" Enter the name of a host computer or <enter> to finish: ");
                host = Console.ReadLine();
                if (host.Length > 0)
                    // Increment the request counter in a thread safe manner.
                    Interlocked.Increment(ref requestCounter);
                    // Start the asynchronous request for DNS information.
                    Dns.BeginGetHostEntry(host, callBack, host);
            } while (host.Length > 0);
            // The user has entered all of the host names for lookup.
            // Now wait until the threads complete.
            while (requestCounter > 0)
            // Display the results.
            for (int i = 0; i< hostNames.Count; i++)
                object data = hostData [i];
                string message = data as string;
                // A SocketException was thrown.
                if (message != null)
                    Console.WriteLine("Request for {0} returned message: {1}", 
                        hostNames[i], message);
                // Get the results.
                IPHostEntry h = (IPHostEntry) data;
                string[] aliases = h.Aliases;
                IPAddress[] addresses = h.AddressList;
                if (aliases.Length > 0)
                    Console.WriteLine("Aliases for {0}", hostNames[i]);
                    for (int j = 0; j < aliases.Length; j++)
                        Console.WriteLine("{0}", aliases[j]);
                if (addresses.Length > 0)
                    Console.WriteLine("Addresses for {0}", hostNames[i]);
                    for (int k = 0; k < addresses.Length; k++)

        // The following method is called when each asynchronous operation completes.
        static void ProcessDnsInformation(IAsyncResult result)
            string hostName = (string) result.AsyncState;
                // Get the results.
                IPHostEntry host = Dns.EndGetHostEntry(result);
            // Store the exception message.
            catch (SocketException e)
                // Decrement the request counter in a thread-safe manner.
                Interlocked.Decrement(ref requestCounter);

Universal Windows Platform
Disponible desde 4.5
.NET Framework
Disponible desde 1.1
Portable Class Library
Compatible con: portable .NET platforms
Disponible desde 2.0
Windows Phone Silverlight
Disponible desde 7.0
Windows Phone
Disponible desde 8.1
Volver al principio
© 2016 Microsoft