December 2007
Intermediate to advanced
896 pages
19h 57m
English
You need a way of receiving notification from an asynchronously invoked delegate that it has finished. This scheme must allow your code to continue processing without having to constantly call IsCompleted in a loop or to rely on the WaitOne method. Since the asynchronous delegate will return a value, you must be able to pass this return value back to the invoking thread.
Use the BeginInvoke method to start the asynchronous delegate, but use the first parameter to pass a callback delegate to the asynchronous delegate, as shown in Example 18-3.
Example 18-3. Getting notification on completion of an anonymous delegate
using System;
using System.Threading;
public class AsyncAction2
{
public void CallbackAsyncDelegate( )
{
AsyncCallback callBack = DelegateCallback;
AsyncInvoke method1 = TestAsyncInvoke.Method1;
Console.WriteLine("Calling BeginInvoke on Thread {0}", Thread.CurrentThread.ManagedThreadId); IAsyncResult asyncResult = method1.BeginInvoke(callBack, method1); // No need to poll or use the WaitOne method here, so return to the calling // method. return; } private static void DelegateCallback(IAsyncResult iresult) { Console.WriteLine("Getting callback on Thread {0}", Thread.CurrentThread.ManagedThreadId); AsyncResult asyncResult = (AsyncResult)iresult; AsyncInvoke method1 = (AsyncInvoke)asyncResult.AsyncDelegate; int retVal = method1.EndInvoke(asyncResult); Console.WriteLine("retVal (Callback): " + ...Read now
Unlock full access