T
tshad
I have a small example of a multiCast program that will invoke 4 delegates
and write to the screen. Each delegate will write 2 lines (begin and end
messages)
I would have thought that I would get the whole delegate finished before the
next one starts. Do MultiCast Delegates run asynchronously?
My code:
**************************************
using System;
using System.Collections.Generic;
using System.Text;
namespace ConsoleApplication1
{
public class DeligateClass
{
public DeligateClass()
{
}
// Declare a delegate
public delegate void MessageHandler(string message);
// The use of the delegate.
public void Process(MessageHandler handler)
{
if (handler != null)
handler("Begin Message");
if (handler != null)
handler("End Message");
}
}
public class FunctionClass
{
public FunctionClass()
{
}
//This method will show alert message to user
public static void AlertMessage(string s)
{
Console.WriteLine("Inside AlertMessage \n " + s);
}
//This method will write output to console
public static void ConsoleMessage(string s)
{
Console.WriteLine("Inside ConsoleMessage\n " + s);
}
}
class Program
{
static void Main(string[] args)
{
DeligateClass dc = new DeligateClass();
DeligateClass.MessageHandler ll = null;
ll += new
DeligateClass.MessageHandler(FunctionClass.AlertMessage);
//Calling a delegate
ll += FunctionClass.ConsoleMessage;
ll += FunctionClass.ConsoleMessage;
ll += FunctionClass.ConsoleMessage;
dc.Process(ll);
Console.ReadLine();
}
}
}
**************************************
The Result:
********************
Inside AlertMessage
Begin Message
Inside ConsoleMessage
Begin Message
Inside ConsoleMessage
Begin Message
Inside ConsoleMessage
Begin Message
Inside AlertMessage
End Message
Inside ConsoleMessage
End Message
Inside ConsoleMessage
End Message
Inside ConsoleMessage
End Message
******************************
It does all the Begins (in order) so all the delegates start (in order).
Then the Ends are done (in order).
Why is it not:
**************************
Inside AlertMessage
Begin Message
Inside AlertMessage
End Message
Inside ConsoleMessage
Begin Message
Inside ConsoleMessage
End Message
Inside ConsoleMessage
Begin Message
Inside ConsoleMessage
End Message
Inside ConsoleMessage
Begin Message
Inside ConsoleMessage
End Message
***************************
Thanks,
Tom
and write to the screen. Each delegate will write 2 lines (begin and end
messages)
I would have thought that I would get the whole delegate finished before the
next one starts. Do MultiCast Delegates run asynchronously?
My code:
**************************************
using System;
using System.Collections.Generic;
using System.Text;
namespace ConsoleApplication1
{
public class DeligateClass
{
public DeligateClass()
{
}
// Declare a delegate
public delegate void MessageHandler(string message);
// The use of the delegate.
public void Process(MessageHandler handler)
{
if (handler != null)
handler("Begin Message");
if (handler != null)
handler("End Message");
}
}
public class FunctionClass
{
public FunctionClass()
{
}
//This method will show alert message to user
public static void AlertMessage(string s)
{
Console.WriteLine("Inside AlertMessage \n " + s);
}
//This method will write output to console
public static void ConsoleMessage(string s)
{
Console.WriteLine("Inside ConsoleMessage\n " + s);
}
}
class Program
{
static void Main(string[] args)
{
DeligateClass dc = new DeligateClass();
DeligateClass.MessageHandler ll = null;
ll += new
DeligateClass.MessageHandler(FunctionClass.AlertMessage);
//Calling a delegate
ll += FunctionClass.ConsoleMessage;
ll += FunctionClass.ConsoleMessage;
ll += FunctionClass.ConsoleMessage;
dc.Process(ll);
Console.ReadLine();
}
}
}
**************************************
The Result:
********************
Inside AlertMessage
Begin Message
Inside ConsoleMessage
Begin Message
Inside ConsoleMessage
Begin Message
Inside ConsoleMessage
Begin Message
Inside AlertMessage
End Message
Inside ConsoleMessage
End Message
Inside ConsoleMessage
End Message
Inside ConsoleMessage
End Message
******************************
It does all the Begins (in order) so all the delegates start (in order).
Then the Ends are done (in order).
Why is it not:
**************************
Inside AlertMessage
Begin Message
Inside AlertMessage
End Message
Inside ConsoleMessage
Begin Message
Inside ConsoleMessage
End Message
Inside ConsoleMessage
Begin Message
Inside ConsoleMessage
End Message
Inside ConsoleMessage
Begin Message
Inside ConsoleMessage
End Message
***************************
Thanks,
Tom