staticint requestCounter; static ArrayList hostData = new ArrayList(); static StringCollection hostNames = new StringCollection(); staticvoidUpdateUserInterface() { // Print a message to indicate that the application // is still working on the remaining requests. Console.WriteLine("{0} requests remaining.", requestCounter); }
publicstaticvoidMain() { // 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 asstring; // 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()); } } } }
staticvoidMain(string[] args) { // open filestream for asynchronous read FileStream fs = new FileStream("somedata.dat", FileMode.Open, FileAccess.Read, FileShare.Read, 1024, FileOptions.Asynchronous); // byte array to hold 100 bytes of data Byte[] data = new Byte[100];
// initiate asynchronous read operation, reading first 100 bytes IAsyncResult ar = fs.BeginRead(data, 0, data.Length, null, null);
// could do something in here which would run alongside file read...
// check for file read complete while (!ar.IsCompleted) { Console.WriteLine("Operation not completed"); Thread.Sleep(10); }
// get the result int bytesRead = fs.EndRead(ar); fs.Close();
Console.WriteLine("Number of bytes read={0}", bytesRead); Console.WriteLine(BitConverter.ToString(data, 0, bytesRead)); }
staticvoidCallBack(IAsyncResult ar) { var result = ar as AsyncResult; var demoDelegate = result.AsyncDelegate as DemoDelegate; var num = demoDelegate.EndInvoke(result); }