• 博客园logo
  • 会员
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • HarmonyOS
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录
aierduo-蒙
博客园    首页    新随笔    联系   管理    订阅  订阅

Thread构造函数

以前在使用Thread类创建新线程的时候,都是按照如下方法创建的:

Thread myThread = new Thread(StartMethord)  //StartMethord为线程启动时要执行的方法

myThread .Start();// 或者是myThread .Start(“参数”);

 

==============

private void StartMethord()

{

      //XXX

}  或者

 

private void StartMethord(object obj)

{

      //XXX

}  

后来才知道Thread的构造函数又4种:

1,public Thread(
    ParameterizedThreadStart start //ParameterizedThreadStart 表示线程启动时,要调用的方法,带一个Object参数
)

2,public Thread(
    ParameterizedThreadStart start,int maxStackSize

      //ParameterizedThreadStart 表示线程启动时,要调用的方法

      //maxStackSize 线程使用的最大堆栈值
)

3,

public Thread(
    ThreadStart start //表示线程启动时,要调用的方法 没有参数的
)

4

 

public Thread(
    ThreadStart start, int maxStackSize

//表示线程启动时,要调用的方法 没有参数的

//maxStackSize 线程使用的最大堆栈值


)

 

显然这4种构造函数没有一个符合我以前创建线程的方式。

我猜测应该是.Net自动的将StartMethord关联到相应的委托去了。

通过MSIL反汇编证明了确实如此,下面是反编译后的代码

 

有参数的:
.method private hidebysig static void  Main(string[] args) cil managed
{
  .entrypoint
  // 代码大小       38 (0x26)
  .maxstack  3
  .locals init ([0] class [mscorlib]System.Threading.Thread myThr)
  IL_0000:  nop
  IL_0001:  ldnull
  IL_0002:  ldftn      void '异步委托'.Program::StartMethord(object)
  IL_0008:  newobj     instance void [mscorlib]System.Threading.ParameterizedThreadStart::.ctor(object,
                                                                                                native int)
  IL_000d:  newobj     instance void [mscorlib]System.Threading.Thread::.ctor(class [mscorlib]System.Threading.ParameterizedThreadStart)
  IL_0012:  stloc.0
  IL_0013:  ldloc.0
  IL_0014:  ldstr      bytearray (50 5B BF 7E 0B 7A C2 53 70 65 )                   // P[.~.z.Spe
  IL_0019:  callvirt   instance void [mscorlib]System.Threading.Thread::Start(object)
  IL_001e:  nop
  IL_001f:  call       int32 [mscorlib]System.Console::Read()
  IL_0024:  pop
  IL_0025:  ret
} // end of method Program::Main

 

//无参数的

.method private hidebysig static void  Main(string[] args) cil managed
{
  .entrypoint
  // 代码大小       33 (0x21)
  .maxstack  3
  .locals init ([0] class [mscorlib]System.Threading.Thread myThr)
  IL_0000:  nop
  IL_0001:  ldnull
  IL_0002:  ldftn      void '异步委托'.Program::StartMethord()
  IL_0008:  newobj     instance void [mscorlib]System.Threading.ThreadStart::.ctor(object,
                                                                                   native int)
  IL_000d:  newobj     instance void [mscorlib]System.Threading.Thread::.ctor(class [mscorlib]System.Threading.ThreadStart)
  IL_0012:  stloc.0
  IL_0013:  ldloc.0
  IL_0014:  callvirt   instance void [mscorlib]System.Threading.Thread::Start()
  IL_0019:  nop
  IL_001a:  call       int32 [mscorlib]System.Console::Read()
  IL_001f:  pop
  IL_0020:  ret
} // end of method Program::Main

 

大家注意红色的地方,自动关联上去了。

 

第一次写东西, 主要的目的是要自己记住会的,同时能学习自己不会的。

写得不好,希望大家不要骂,谢谢!

我错了
posted @ 2009-05-08 23:16  Ni  阅读(1003)  评论(0)    收藏  举报
刷新页面返回顶部
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3