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();//这里的started()是在哪里构造的呢? Console.WriteLine("工作: 工作进行中");
if (progressing != null) progressing();
//if (completed != null)
//{
// int grade = completed();
// Console.WriteLine("工人的工作得分=" + grade);
//} //if (completed != null)
//{
// foreach (WorkCompleted wc in completed.GetInvocationList())
// {
// int grade = wc();
// Console.WriteLine("工人的工作得分=" + grade);
// }
//}
//Console.WriteLine("“工作: 工作完成”");
//if (completed != null)
//{
// foreach (WorkCompleted wc in completed.GetInvocationList())
// {
// wc.BeginInvoke(null, null);
// }
//}
//Console.WriteLine("“工作: 工作完成”");
//if (completed != null)
//{
// foreach (WorkCompleted wc in completed.GetInvocationList())
// {
// IAsyncResult res = wc.BeginInvoke(null, null);
// while (!res.IsCompleted) System.Threading.Thread.Sleep(1);
// int grade = wc.EndInvoke(res);
// Console.WriteLine("工人的工作得分=" + grade);
// }
//}
Console.WriteLine("“工作: 工作完成”");
if (completed != null)
{
foreach (WorkCompleted wc in completed.GetInvocationList())
{
wc.BeginInvoke(new AsyncCallback(WorkGraded), wc);
}
} }
private void WorkGraded(IAsyncResult res) {
WorkCompleted wc = (WorkCompleted)res.AsyncState;
int grade = wc.EndInvoke(res);
Console.WriteLine("工人的工作得分=" + grade);
} //public WorkStarted started;
//public WorkProgressing progressing;
//public WorkCompleted completed;
public event WorkStarted started;
public event WorkProgressing progressing;
public event WorkCompleted completed;
}class Boss
{
//public int WorkCompleted()
//{
// Console.WriteLine("Better...");
// return 4; /* 总分为10 */
//}
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()
//{
// Console.WriteLine("Universe pleased with worker's work");
// return 7;
//}
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(); Worker peter = new Worker();
Boss boss = new Boss();
peter.completed += new WorkCompleted(boss.WorkCompleted);//这个new WorkCompleted是引用哪一段代码来定义WorkCompleted的呢?
peter.started += new WorkStarted(Universe.WorkerStartedWork);
peter.completed += new WorkCompleted(Universe.WorkerCompletedWork); peter.DoWork(); Console.WriteLine("Main: 工人工作完成");
Console.ReadLine(); }
}
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();//这里的started()是在哪里构造的呢? Console.WriteLine("工作: 工作进行中");
if (progressing != null) progressing();
//if (completed != null)
//{
// int grade = completed();
// Console.WriteLine("工人的工作得分=" + grade);
//} //if (completed != null)
//{
// foreach (WorkCompleted wc in completed.GetInvocationList())
// {
// int grade = wc();
// Console.WriteLine("工人的工作得分=" + grade);
// }
//}
//Console.WriteLine("“工作: 工作完成”");
//if (completed != null)
//{
// foreach (WorkCompleted wc in completed.GetInvocationList())
// {
// wc.BeginInvoke(null, null);
// }
//}
//Console.WriteLine("“工作: 工作完成”");
//if (completed != null)
//{
// foreach (WorkCompleted wc in completed.GetInvocationList())
// {
// IAsyncResult res = wc.BeginInvoke(null, null);
// while (!res.IsCompleted) System.Threading.Thread.Sleep(1);
// int grade = wc.EndInvoke(res);
// Console.WriteLine("工人的工作得分=" + grade);
// }
//}
Console.WriteLine("“工作: 工作完成”");
if (completed != null)
{
foreach (WorkCompleted wc in completed.GetInvocationList())
{
wc.BeginInvoke(new AsyncCallback(WorkGraded), wc);
}
} }
private void WorkGraded(IAsyncResult res) {
WorkCompleted wc = (WorkCompleted)res.AsyncState;
int grade = wc.EndInvoke(res);
Console.WriteLine("工人的工作得分=" + grade);
} //public WorkStarted started;
//public WorkProgressing progressing;
//public WorkCompleted completed;
public event WorkStarted started;
public event WorkProgressing progressing;
public event WorkCompleted completed;
}class Boss
{
//public int WorkCompleted()
//{
// Console.WriteLine("Better...");
// return 4; /* 总分为10 */
//}
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()
//{
// Console.WriteLine("Universe pleased with worker's work");
// return 7;
//}
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(); Worker peter = new Worker();
Boss boss = new Boss();
peter.completed += new WorkCompleted(boss.WorkCompleted);//这个new WorkCompleted是引用哪一段代码来定义WorkCompleted的呢?
peter.started += new WorkStarted(Universe.WorkerStartedWork);
peter.completed += new WorkCompleted(Universe.WorkerCompletedWork); peter.DoWork(); Console.WriteLine("Main: 工人工作完成");
Console.ReadLine(); }
}
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();//这里的started()是在哪里构造的呢?//started()是一个事件。这里是在检查事件链中是否已经有订阅的事件。如果有则激活事件 Console.WriteLine("工作: 工作进行中");
if (progressing != null) progressing();
//if (completed != null)
//{
// int grade = completed();
// Console.WriteLine("工人的工作得分=" + grade);
//} //if (completed != null)
//{
// foreach (WorkCompleted wc in completed.GetInvocationList())
// {
// int grade = wc();
// Console.WriteLine("工人的工作得分=" + grade);
// }
//}
//Console.WriteLine("“工作: 工作完成”");
//if (completed != null)
//{
// foreach (WorkCompleted wc in completed.GetInvocationList())
// {
// wc.BeginInvoke(null, null);
// }
//}
//Console.WriteLine("“工作: 工作完成”");
//if (completed != null)
//{
// foreach (WorkCompleted wc in completed.GetInvocationList())
// {
// IAsyncResult res = wc.BeginInvoke(null, null);
// while (!res.IsCompleted) System.Threading.Thread.Sleep(1);
// int grade = wc.EndInvoke(res);
// Console.WriteLine("工人的工作得分=" + grade);
// }
//}
Console.WriteLine("“工作: 工作完成”");
if (completed != null)
{
foreach (WorkCompleted wc in completed.GetInvocationList())
{
wc.BeginInvoke(new AsyncCallback(WorkGraded), wc);
}
} }
private void WorkGraded(IAsyncResult res) {
WorkCompleted wc = (WorkCompleted)res.AsyncState;
int grade = wc.EndInvoke(res);
Console.WriteLine("工人的工作得分=" + grade);
} //public WorkStarted started;
//public WorkProgressing progressing;
//public WorkCompleted completed;
public event WorkStarted started;
public event WorkProgressing progressing;
public event WorkCompleted completed;
}class Boss
{
//public int WorkCompleted()
//{
// Console.WriteLine("Better...");
// return 4; /* 总分为10 */
//}
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()
//{
// Console.WriteLine("Universe pleased with worker's work");
// return 7;
//}
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(); Worker peter = new Worker();
Boss boss = new Boss();
peter.completed += new WorkCompleted(boss.WorkCompleted);//这个new WorkCompleted是引用哪一段代码来定义WorkCompleted的呢?//这里是一个事件订阅的基本语法。WorkCompleted是一个委托用来将事件的方法添加到委托链中
peter.started += new WorkStarted(Universe.WorkerStartedWork);
peter.completed += new WorkCompleted(Universe.WorkerCompletedWork); peter.DoWork(); Console.WriteLine("Main: 工人工作完成");
Console.ReadLine(); }
}
也就是一个无返回类型并且无参数的委托,if (started != null)是用来判断事件委托是否被订阅的,从上面代码看该委托的
订阅是在“peter.started += new WorkStarted(Universe.WorkerStartedWork);”这里完成的。
当started != null的时候,就通过started()来执行订阅者的实际调用方法也就是Universe.WorkerStartedWork该方法peter.completed += new WorkCompleted(boss.WorkCompleted);//这个new WorkCompleted是引用哪一段代码来定义WorkCompleted的呢?这句话是注册事件的一种表达方式,你可以随便创建一个winForm程序,添加一个窗体的Form1_Load事件
那么你就会在Form1.Desinger.cs文件中找到该事件的注册语句this.Load += new System.EventHandler(this.Form1_Load);语言表达能力不是很好,但希望对你有帮助