A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 鬼鬼 中级黑马   /  2014-3-25 10:57  /  1036 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 鬼鬼 于 2014-3-25 23:15 编辑

当事件触发时,程序会顺序执行与事件绑定的处理函数,那请问这时系统是会开辟一个新线程来执行事件处理函数,还是会在原线程上顺序执行?

评分

参与人数 1技术分 +1 收起 理由
czwanglei + 1

查看全部评分

4 个回复

倒序浏览
这要具体看你自己怎么设置的吧, 使用的是线程池还是直接创建线程, 执行方法是同步还是异步, 线程池的活动线程数还够不够等等方面.
回复 使用道具 举报
lmm 发表于 2014-3-25 11:44
这要具体看你自己怎么设置的吧, 使用的是线程池还是直接创建线程, 执行方法是同步还是异步, 线程池的活动线 ...

如果就像这样的简单使用呢?
  1.     public delegate void MyDelegate();

  2.     class Program
  3.     {
  4.         public static event MyDelegate myEvent = null;

  5.         static void Main(string[] args)
  6.         {
  7.             myEvent += new MyDelegate(func);
  8.             myEvent();
  9.             Console.ReadKey(true);
  10.         }

  11.         private static void func()
  12.         {
  13.             Console.WriteLine("test function");
  14.         }
  15.     }
复制代码
回复 使用道具 举报
本帖最后由 lmm 于 2014-3-25 13:59 编辑

我觉得这种触发事件就和调用方法一样
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using System.Threading;
  6. using System.Threading.Tasks;

  7. namespace 简单事件
  8. {
  9.     public delegate void MyDelegate();

  10.     class Program
  11.     {
  12.         public static event MyDelegate myEvent = null;

  13.         static void Main(string[] args)
  14.         {
  15.             Console.WriteLine("主函数的线程ID: {0}", Thread.CurrentThread.ManagedThreadId);
  16.             myEvent += new MyDelegate(func);
  17.             myEvent();
  18.             Console.WriteLine("主程序执行完毕");
  19.             Console.ReadKey(true);
  20.         }

  21.         private static void func()
  22.         {
  23.             Console.WriteLine("当前的线程ID: {0}", Thread.CurrentThread.ManagedThreadId);
  24.             Thread.Sleep(1000000);
  25.             Console.WriteLine("test function");
  26.         }
  27.     }
  28. }

复制代码
可以看出这是顺序执行的. 线程ID都是Main函数的ID, 说明并没有单独建立线程.


回复 使用道具 举报
lmm 发表于 2014-3-25 13:43
我觉得这种触发事件就和调用方法一样
可以看出这是顺序执行的. 线程ID都是Main函数的ID, 说明并没有单独建 ...

明白了,谢谢!
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马