110,534
社区成员
发帖
与我相关
我的任务
分享
#region 异步通知:委托
delegate void WorkStarted();
delegate void WorkProgressing();
delegate int WorkCompleted();
class Worker
{
//委托监视的事件
public event WorkStarted started;
public event WorkProgressing progressing;
public event WorkCompleted completed;
public void DoWork()
{
Console.WriteLine("工作: 工作开始");
if (started != null) started();
Console.WriteLine("工作: 工作进行中");
if (progressing != null) progressing();
Console.WriteLine("工作: 工作完成");
/************************************************
* 不幸地,彼得有回到了一开始就想避免的情况中来,比如,老板站在背后盯着他工作。
* 于是,他决定使用自己的委托 作为 他调用的 异步委托完成的通知,让他自己立即回到工作,
* 但是仍可以在别人给他的工作打分后得到通知:
************************************************/
if (completed != null)
{
foreach (WorkCompleted wc in completed.GetInvocationList())
{
wc.BeginInvoke(new AsyncCallback(WorkGraded), wc);//此是你要看,WorkGraded就是回调函数
}
}
}
private void WorkGraded(IAsyncResult res)//
{
WorkCompleted wc = (WorkCompleted)res.AsyncState;
int grade = wc.EndInvoke(res);
Console.WriteLine("工人的工作得分=" + grade);
}
}
class Boss
{
public int WorkCompleted()
{
System.Threading.Thread.Sleep(3000);
Console.WriteLine("Better...");
return 6; /* 总分为10 */
}
}
class Universe
{
static void WorkerStartedWork()
{
Console.WriteLine("Universe notices worker starting work");
}
static int WorkerCompletedWork()
{
System.Threading.Thread.Sleep(4000);
Console.WriteLine("Universe pleased with worker~s work");
return 7;
}
static void Main()
{
Worker peter = new Worker();
Boss boss = new Boss();
peter.completed += new WorkCompleted(boss.WorkCompleted);
peter.started += new WorkStarted(Universe.WorkerStartedWork);
peter.completed += new WorkCompleted(Universe.WorkerCompletedWork);
peter.DoWork();
Console.WriteLine("Main: 工人工作完成");
Console.ReadLine();
}
}
#endregion