博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
c# 多线程 调用带参数函数
阅读量:5979 次
发布时间:2019-06-20

本文共 1726 字,大约阅读时间需要 5 分钟。

线程操作主要用到Thread类,他是定义在System.Threading.dll下。使用时需要添加这一个引用。该类提供给我们四个重载的构造函数(以下引自msdn)。    

   
Thread (ParameterizedThreadStart) 初始化 Thread 类的新实例,指定允许对象在线程启动时传递给线程的委托。     
Thread (ThreadStart) 初始化 Thread 类的新实例。    
由 .NET Compact Framework 支持。    
    
Thread (ParameterizedThreadStart, Int32) 初始化 Thread 类的新实例,指定允许对象在线程启动时传递给线程的委托,并指定线程的最大堆栈大小。     
Thread (ThreadStart, Int32) 初始化 Thread 类的新实例,指定线程的最大堆栈大小。    
由 .NET Compact Framework 支持。   
    
   
   
  我们如果定义不带参数的线程,可以用ThreadStart,带一个参数的用ParameterizedThreadStart。带多个参数的用另外的方法,下面逐一讲述。   
   
一、不带参数的   
   
using System;   
using System.Collections.Generic;   
using System.Text;   
using System.Threading;   
   
namespace AAAAAA   
{   
  class AAA   
  {   
    public static void Main()   
  {   
    Thread t = new Thread(new ThreadStart(A));   
    t.Start();   
    Console.Read();   
  }   
   
  private static void A()   
  {   
    Console.WriteLine("Method A!");   
  }   
  }   
}   
    
   
  结果显示Method A!   
   
二、带一个参数的   
   
  由于ParameterizedThreadStart要求参数类型必须为object,所以定义的方法B形参类型必须为object。   
   
using System;   
using System.Collections.Generic;   
using System.Text;   
using System.Threading;   
   
namespace AAAAAA   
{   
  class AAA   
  {   
    public static void Main()   
  {     
    Thread t = new Thread(new ParameterizedThreadStart(B));   
    t.Start("B");   
    Console.Read();   
  }   
   
  private static void B(object obj)   
  {   
    Console.WriteLine("Method {0}!",obj.ToString ());   
  }   
  }   
}   
    
   
 结果显示Method B!    
   
三、带多个参数的   
   
  由于Thread默认只提供了这两种构造函数,如果需要传递多个参数,我们可以自己将参数作为类的属性。定义类的对象时候实例化这个属性,然后进行操作。   
   
using System;   
using System.Collections.Generic;   
using System.Text;   
using System.Threading;   
   
namespace AAAAAA   
{   
  class AAA   
  {   
    public static void Main()   
  {   
  My m = new My();   
  m.x = 2;   
  m.y = 3;   
   
  Thread t = new Thread(new ThreadStart(m.C));   
  t.Start();   
   
  Console.Read();   
  }   
  }   
   //自定义的类,类中有两个属性,一个方法
  class My   
  {   
    public int x, y;   
   
    public void C()   
    {   
      Console.WriteLine("x={0},y={1}", this.x, this.y);   
    }   
  }   
}   
    
   
  结果显示x=2,y=3    
 

转载地址:http://czoox.baihongyu.com/

你可能感兴趣的文章
Linux Shell 编程语法
查看>>
学习笔记【第七章】
查看>>
Structs 学习笔记
查看>>
.net学习体会
查看>>
如何用函数初始化结构体
查看>>
易宝典文章——用ISA 2006标准版发布Exchange 2010的OWA系列之网络结构篇
查看>>
linux定时任务Crond之服务器同步时间05
查看>>
隐忍的艺术
查看>>
SFB公开课:TMG/IISARR/Web Application Proxy/发布UC(Lync/SFB)-2
查看>>
linux服务器集群运维经验
查看>>
数据中心的重要服务器如何保护?
查看>>
mysql隐式转换造成索引失效的事故总结
查看>>
互联网分析师到底是做什么的?
查看>>
在vSphere群集中配置EVC的注意事项
查看>>
Windows Server 8 Beta 初体验之二:Hyper-v
查看>>
OpenSNS系统评测:社群经济的第一核心是身份标签
查看>>
谷歌打压宏基是要收回安卓控制权
查看>>
用saltstack cp模块实现文件管理、拉取和回滚下发
查看>>
葡萄城报表模板库再次更新!补充医院Dashboard及房地产销售行业报表
查看>>
Adhesive框架系列文章--分布式组件客户端模块实现
查看>>