/*
* C# Programmers Pocket Consultant
* Author: Gregory S. MacBeth
* Email: gmacbeth@comporium.net
* Create Date: June 27, 2003
* Last Modified Date:
* Version: 1
*/
using System;
using System.Threading;
using System.Runtime.Remoting.Messaging;
namespace Client.Chapter_15___Threading
{
public class MyMainClassAsyncCallback
{
delegate int MyDelegate(string s, ref int a, ref int b);
static void Main(string[] args)
{
MyDelegate X = new MyDelegate(DoSomething);
int a = 0;
int b = 0;
//Making Async Call that calls a callback when finished
AsyncCallback cb = new AsyncCallback(DoSomething2);
IAsyncResult ar = X.BeginInvoke("Hello", ref a, ref b, cb, null);
Console.ReadLine();
}
//My Async Method
static int DoSomething(string s, ref int a, ref int b)
{
a = 10;
b = 100;
Console.WriteLine("Fired! DoSomething1");
return 0;
}
//Mycallback method when finished running DoSomehting
static void DoSomething2(IAsyncResult ar)
{
int a = 0;
int b = 0;
Console.WriteLine("Fired! DoSomething2");
//Get the delegate
MyDelegate X = (MyDelegate)((AsyncResult)ar).AsyncDelegate;
//get results
X.EndInvoke(ref a, ref b, ar);
Console.WriteLine(a);
Console.WriteLine(b);
}
}
}