黑马程序员技术交流社区

标题: 请问事件触发时是否会开辟新线程? [打印本页]

作者: 鬼鬼    时间: 2014-3-25 10:57
标题: 请问事件触发时是否会开辟新线程?
本帖最后由 鬼鬼 于 2014-3-25 23:15 编辑

当事件触发时,程序会顺序执行与事件绑定的处理函数,那请问这时系统是会开辟一个新线程来执行事件处理函数,还是会在原线程上顺序执行?
作者: lmm    时间: 2014-3-25 11:44
这要具体看你自己怎么设置的吧, 使用的是线程池还是直接创建线程, 执行方法是同步还是异步, 线程池的活动线程数还够不够等等方面.
作者: 鬼鬼    时间: 2014-3-25 12:25
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:43
本帖最后由 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, 说明并没有单独建立线程.



作者: 鬼鬼    时间: 2014-3-25 23:15
lmm 发表于 2014-3-25 13:43
我觉得这种触发事件就和调用方法一样
可以看出这是顺序执行的. 线程ID都是Main函数的ID, 说明并没有单独建 ...

明白了,谢谢!




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2