using System;
using System.Threading;
//不需要构造函数的委托对象
internal sealed class NoConstructorDelegateClass
{
public static void CallbackWithoutNewingADelegateObject()
{
ThreadPool.QueueUserWorkItem(SomeAsyncTask, 5);
}
private static void SomeAsyncTask(Object o)
{
Console.WriteLine(o);
}
}
//不需要定义回调方法,生成一个一个静态委托字段,并在调用时实例化
internal sealed class NoCallbackMethodDelegateClass
{
public static void CallbackWithoutNewingADelegateOjbect()
{
ThreadPool.QueueUserWorkItem(delegate(Object obj) { Console.WriteLine(sm_name + obj); },5);
}
}
//不需要指定回调方法的参数
internal sealed class NoCallbackMethodAndParametersDelegateClass
{
public static void CallbackWithoutNewingADelegateOjbect()
{
ThreadPool.QueueUserWorkItem(delegate{ Console.WriteLine("Test"); }, 5);
}
}
//不需要将局部变量人工封装到类中,即可将它们传给一个回调方法 自动生成辅助类
internal sealed class NoEnLocalVarToClassDelegateClass
{
public static void UsingLocalVariablesInTheCallbackCode(Int32 numToDo)
{
Int32[] squares = new Int32[numToDo];
AutoResetEvent done = new AutoResetEvent(false);
for (Int32 n = 0; n < squares.Length; n++)
{
ThreadPool.QueueUserWorkItem(delegate(Object obj)
{
Int32 num = (Int32)obj;
squares[num] = num * num;
if (Interlocked.Decrement(ref numToDo) == 0)
done.Set();
}, n);
}
done.WaitOne();
for (Int32 n = 0; n < squares.Length; n++)
{
Console.WriteLine("Index {0},Square = [1]",n,squares[n]);
}
}
}