AsyncCallback 代理人
定義
対応する非同期操作が完了したときに呼び出されるメソッドを参照します。References a method to be called when a corresponding asynchronous operation completes.
public delegate void AsyncCallback(IAsyncResult ^ ar);
public delegate void AsyncCallback(IAsyncResult ar);
[System.Serializable]
public delegate void AsyncCallback(IAsyncResult ar);
[System.Serializable]
[System.Runtime.InteropServices.ComVisible(true)]
public delegate void AsyncCallback(IAsyncResult ar);
type AsyncCallback = delegate of IAsyncResult -> unit
[<System.Serializable>]
type AsyncCallback = delegate of IAsyncResult -> unit
[<System.Serializable>]
[<System.Runtime.InteropServices.ComVisible(true)>]
type AsyncCallback = delegate of IAsyncResult -> unit
Public Delegate Sub AsyncCallback(ar As IAsyncResult)
パラメーター
- ar
- IAsyncResult
非同期操作の結果。The result of the asynchronous operation.
- 継承
- 属性
例
次のコード例は、ユーザー指定のコンピューターのドメイン ネーム システム (DNS) 情報を取得するために、Dns クラスの非同期メソッドを使用してデモを実行します。The following code example demonstrates using asynchronous methods in the Dns class to retrieve Domain Name System (DNS) information for user-specified computers. この例では、ProcessDnsInformation
メソッドを参照する AsyncCallback デリゲートを作成します。This example creates an AsyncCallback delegate that references the ProcessDnsInformation
method. このメソッドは、DNS 情報に対する非同期要求ごとに 1 回呼び出されます。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
operation.
*/
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;
do
{
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)
{
UpdateUserInterface();
}
// 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);
continue;
}
// 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++)
{
Console.WriteLine("{0}",addresses[k].ToString());
}
}
}
}
// The following method is called when each asynchronous operation completes.
static void ProcessDnsInformation(IAsyncResult result)
{
string hostName = (string) result.AsyncState;
hostNames.Add(hostName);
try
{
// Get the results.
IPHostEntry host = Dns.EndGetHostEntry(result);
hostData.Add(host);
}
// Store the exception message.
catch (SocketException e)
{
hostData.Add(e.Message);
}
finally
{
// Decrement the request counter in a thread-safe manner.
Interlocked.Decrement(ref requestCounter);
}
}
}
}
'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
'operation.
Imports System.Net
Imports System.Net.Sockets
Imports System.Threading
Imports System.Collections.Specialized
Imports System.Collections
Namespace Examples.AdvancedProgramming.AsynchronousOperations
Public Class UseDelegateForAsyncCallback
Dim Shared requestCounter as Integer
Dim Shared hostData as ArrayList = new ArrayList()
Dim Shared hostNames as StringCollection = new StringCollection()
Shared Sub UpdateUserInterface()
' Print a message to indicate that the application
' is still working on the remaining requests.
Console.WriteLine("{0} requests remaining.", requestCounter)
End Sub
Public Shared Sub Main()
' Create the delegate that will process the results of the
' asynchronous request.
Dim callBack as AsyncCallback
Dim host as string
Dim i, j, k as Integer
callback = AddressOf ProcessDnsInformation
Do
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(requestCounter)
' Start the asynchronous request for DNS information.
Dns.BeginGetHostEntry(host, callBack, host)
End If
Loop While (host.Length > 0)
' The user has entered all of the host names for lookup.
' Now wait until the threads complete.
Do While requestCounter > 0
UpdateUserInterface()
Loop
' Display the results.
For i = 0 To hostNames.Count -1
Dim dataObject as Object = hostData (i)
Dim message as String
' Was a SocketException was thrown?
If TypeOf dataObject is String
message = CType(dataObject, String)
Console.WriteLine("Request for {0} returned message: {1}", _
hostNames(i), message)
Else
' Get the results.
Dim h as IPHostEntry = CType(dataObject, IPHostEntry)
Dim aliases() as String = h.Aliases
Dim addresses() as IPAddress = h.AddressList
If aliases.Length > 0
Console.WriteLine("Aliases for 0}", hostNames(i))
For j = 0 To aliases.Length -1
Console.WriteLine("{0}", aliases(j))
Next j
End If
If addresses.Length > 0
Console.WriteLine("Addresses for {0}", hostNames(i))
For k = 0 To addresses.Length -1
Console.WriteLine("{0}",addresses(k).ToString())
Next k
End If
End If
Next i
End Sub
' The following method is called when each asynchronous operation completes.
Shared Sub ProcessDnsInformation(result as IAsyncResult)
Dim hostName as String = CType(result.AsyncState, String)
hostNames.Add(hostName)
Try
' Get the results.
Dim host as IPHostEntry = Dns.EndGetHostEntry(result)
hostData.Add(host)
' Store the exception message.
Catch e as SocketException
hostData.Add(e.Message)
Finally
' Decrement the request counter in a thread-safe manner.
Interlocked.Decrement(requestCounter)
End Try
End Sub
End Class
End Namespace
注釈
AsyncCallback非同期操作の結果を別のスレッドで処理するには、デリゲートを使用します。Use an AsyncCallback delegate to process the results of an asynchronous operation in a separate thread. デリゲートは、 AsyncCallback 非同期操作の完了時に呼び出されるコールバックメソッドを表します。The AsyncCallback delegate represents a callback method that is called when the asynchronous operation completes. コールバックメソッドは、 IAsyncResult パラメーターを受け取ります。このパラメーターは、その後、非同期操作の結果を取得するために使用されます。The callback method takes an IAsyncResult parameter, which is subsequently used to obtain the results of the asynchronous operation.
非同期プログラミングの詳細については、「 Asynccallback デリゲートを使用した非同期操作の終了」および「イベントベースの非同期パターン (EAP)でのasynccallback デリゲートおよび状態オブジェクトの使用」を参照してください。For more information about asynchronous programming, see Using an AsyncCallback Delegate to End an Asynchronous Operation and Using an AsyncCallback Delegate and State Object in Event-based Asynchronous Pattern (EAP).
拡張メソッド
GetMethodInfo(Delegate) |
指定したデリゲートによって表されるメソッドを表すオブジェクトを取得します。Gets an object that represents the method represented by the specified delegate. |
適用対象
こちらもご覧ください
- IAsyncResult
- AsyncCallback デリゲートの使用による非同期操作の終了Using an AsyncCallback Delegate to End an Asynchronous Operation
- AsyncCallback デリゲートおよび状態オブジェクトの使用Using an AsyncCallback Delegate and State Object
- 同期メソッドの非同期呼び出しCalling Synchronous Methods Asynchronously
- イベント ベースの非同期パターン (EAP)Event-based Asynchronous Pattern (EAP)
- イベントの処理と発生Handling and Raising Events