关于事件与委托的疑惑

这两天在学习事件与委托,为了加深理解,我编写了一些代码,实现通过事件与委托在线程间通信,但在这个过程中,发现一些情况,有些疑惑,希望看到的前辈能留下您的看法。

程序有两个部分,MainForm和一个WorkThread,实现的动作是WorkThread计数,并在计数后通过事件或委托通知MainForm更新界面。

无论是使用事件还是委托,都能正确实现上述功能。但是在进行跟踪时,通过监视线程执行情况,发现一些问题:使用事件时,更新界面的方法是附着在WorkThread线程中执行的,而使用委托的时候,则是附着在主窗体线程中实现,这是为什么呢?

以下是相关代码片断:

MainForm:

public WorkThread work;

private void Start_Click(object sender, System.EventArgs e)

{

 work = new WorkThread ();

 work.Notify += new WorkThread .NotifyEventHandler(ShowSample);

}

public void ShowSample(int num)

{

 textResult.Text = num.ToString();

}

public class WorkThread

{

 public delegate void NotifyEventHandler(int num);

 public event NotifyEventHandler Notify;

 public Thread myThread;

 private main;

 public WorkThread(MainForm pForm)

 {

  main = pForm;

  myThread = new Thread(new ThreadStart(Work);

  myThread.Start();

 }

 private void Work()

 {

  int i = 0;

  object[] args = new object[1];

  while(true)

  {

   Thread.Sleep(1000);

   args[0] = i;

   //main.BeginInvoke(new NotifyEventHandler(main.ShowSample),args);   //使用委托

   Notify(index,i);   //使用事件

   i++;

  }

 }

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值