using System;
using System.Collections.Generic;
using System.Text;delegate void WorkStarted();
delegate void WorkProgressing();
delegate int WorkCompleted();class Worker
{
    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())//GetInvocationList是啥啊?
            {
                wc.BeginInvoke(new AsyncCallback(WorkGraded), wc);//这句话啥意思?asynccallbakc是啥东西?
            }
        }    }    private void WorkGraded(IAsyncResult res) {
           WorkCompleted wc = (WorkCompleted)res.AsyncState;//这句话啥意思?res.AsyncState是啥意思?
           int grade = wc.EndInvoke(res);//这句话啥意思?
           Console.WriteLine("工人的工作得分=" + grade);
       }
    public event WorkStarted started;
    public event WorkProgressing progressing;
    public event WorkCompleted completed;
}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 is 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();    }
}

解决方案 »

  1.   


    using System;
    using System.Collections.Generic;
    using System.Text;delegate void WorkStarted();
    delegate void WorkProgressing();
    delegate int WorkCompleted();class Worker
    {
    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())
    //Delegate.GetInvocationList 方法 
    //public virtual Delegate[] GetInvocationList()
    //返回值:委托构成的数组,表示当前委托的调用列表。
    {
    wc.BeginInvoke(new AsyncCallback(WorkGraded), wc);
    //异步调用wc这个代理,WorkGrade是回调函数,wc是传给回调函数的对象(类似与参数)
    }
    } } private void WorkGraded(IAsyncResult res)
    {
    WorkCompleted wc = (WorkCompleted)res.AsyncState;//回调函数接受调用函数传给他的对象,就是刚才的wc
    int grade = wc.EndInvoke(res);//故名思议:结束调用
    Console.WriteLine("工人的工作得分=" + grade);
    } public event WorkStarted started;
    public event WorkProgressing progressing;
    public event WorkCompleted completed;
    }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 is 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();
    }
    }