多重影分身——C#中多线程的使用三(调用方法和传参)
对Thread:
1、使用ThreadStart
static void Main(string[] args)
{
Thread th1=new Thread(new ThreadStart(SayHello));
th1.Start();
Console.ReadKey();
}
static void SayHello()
{
Console.WriteLine("Hello!");
}
这种形式只能是无参的空类型函数,如果需要传参数,就得用ParameterizedThreadStart。
2、使用ParameterizedThreadStart
static void Main(string[] args)
{
Thread th1 = new Thread(new ParameterizedThreadStart(SayHello));
string para="I'm parameter!";
th1.Start(para); //传入参数para
Console.ReadKey();
} static void SayHello(object obj) //只能是object类型,只能有一个,多个参数需要封装在一个自定义对象中
{
string str = obj as string;
Console.WriteLine(str);
}
这个方法依然是空类型,它允许我们传一个参数,但只能是object类型,只能传一个。
在线程池中:
1、调用无参的空类型方法
static void Main(string[] args)
{
ThreadPool.QueueUserWorkItem(new WaitCallback(SayHello)); //这个方法可以简写成ThreadPool.QueueUserWorkItem(SayHello);
Console.ReadKey();
} static void SayHello()
{
Console.WriteLine("Hello!");
}
2、调用有参的空类型方法
static void Main(string[] args)
{
string para="I'm parameter!";
ThreadPool.QueueUserWorkItem(new WaitCallback(SayHello), para); //把参数写在这里,这个方法可以简写成ThreadPool.QueueUserWorkItem(SayHello,para);
th1.Start(para); //传入参数para
Console.ReadKey();
} static void SayHello(object obj) //只能是object类型,只能有一个,多个参数需要封装在一个自定义对象中
{
string str = obj as string;
Console.WriteLine(str);
}
这个方法跟ParameterizedThreadStart一样,也是只能传一个object类型的参数。
在达到如下目标时,应使用ThreadPool类:
1.要以最简单的方式创建和删除线程;
2.应用程序使用线程的性能要优先考虑。
在达到如下目标时,应使用Thread类:
1.要控制所创建线程的优先级;
2.希望所使用的线程维护其标识,该标识要与线程一起进行各种操作,经过许多不同的时间段;
3.所使用的线程的寿命较长。
参考资料:http://www.cnblogs.com/leslies2/archive/2012/02/07/2310495.html
多重影分身——C#中多线程的使用三(调用方法和传参)的更多相关文章
- JavaScript去除空格的三种方法(正则/传参函数/trim)
方法一: 个人认为最好的方法.采用的是正则表达式,这是最核心的原理. 其次.这个方法使用了JavaScript 的prototype 属性 其实你不使用这个属性一样可以用函数实现.但这样做后用起来比较 ...
- Delphi 中多线程同步的一些处理方法
Delphi 中多线程同步的一些处理方法 当创建了多个线程,并且多个线程都要访问同一资源,,就有可能出现混乱,于是用Synchronize来控制,使同一时间只有一个线程使用那部分资源,Synchr ...
- Android中全屏 取消标题栏,TabHost中设置NoTitleBar的三种方法(转)
Android中全屏 取消标题栏,TabHost中设置NoTitleBar的三种方法http://www.cnblogs.com/zdz8207/archive/2013/02/27/android- ...
- Openerp 中打开 URL 的三种 方法
来自:http://shine-it.net/index.php/topic,8013.0.html 最近总结了,Openerp 中打开 URL 的三种 方法: 一.在form view 添加 < ...
- mysql 中添加索引的三种方法
原文:http://www.andyqian.com/2016/04/06/database/mysqleindex/ 在mysql中有多种索引,有普通索引,全文索引,唯一索引,多列索引,小伙伴们可以 ...
- jQuery中detach&&remove&&empty三种方法的区别
jQuery中empty&&remove&&detach三种方法的区别 empty():移除指定元素内部的所有内容,但不包括它本身 remove():移除指定元素内部的 ...
- (1)构造方法和方法重载 (2)this关键字 (3)方法的传参和递归调用
1.构造方法和方法重载如: Person p = new Person(); - 声明Person类型的引用p指向Person类型的对象 p.show(); - 调用名字为show()的成员方法 1. ...
- C#中datatable导出excel(三种方法)
方法一:(拷贝直接可以使用,适合大批量资料, 上万笔) Microsoft.Office.Interop.Excel.Application appexcel = new Microsoft.Offi ...
- Android开发中完全退出程序的三种方法
参考: http://android.tgbus.com/Android/tutorial/201108/363511.shtml Android程序有很多Activity,比如说主窗口A,调用了子窗 ...
随机推荐
- JS 可变参数
JS可变参数的方法不需要参数,同时,我们应该注意在写JS文件的时候避免定义arguments变量. <html> <head> <title>Javascri ...
- Java中封装性的使用
//Java面对对象基本特性之一:封装性 //作用:保护某些属性和方法不被外部所看见 //封装的实现:通过关键字private声明 //鼠标右键--->Source---->Generat ...
- 【linux学习笔记】Sublime Text3支持GB2312和GBK编码以及中文输入法
几天在ubuntu15.10下使用Sublime Text3发现中文乱码,以及不能使用中文输入法(搜狗输入法linux版)的问题,捣鼓了半天,终于完善了,下面po一下我的解决方案. 一.支持GB231 ...
- uploadify 3.2 java应用丢失session
flash中有个bug就是自身创建一个session,这样就导致与web本身的session不一致 权限验证失败的问题. 原因: 因为uploadify是不会自动传送session值的,所以当ses ...
- UNIX环境高级编程——管道和FIFO的额外属性
一个描述符能以两种方式设置成非阻塞. (1)调用open时可以指定O_NONBLOCK标志. writefd = open(FIFO1,O_WRONLY | O_NONBLOCK,0); (2)如果一 ...
- Linux进程实践(1) --Linux进程编程概述
进程 VS. 程序 什么是程序? 程序是完成特定任务的一系列指令集合. 什么是进程? [1]从用户的角度来看:进程是程序的一次执行过程 [2]从操作系统的核心来看:进程是操作系统分配的内存.CPU时间 ...
- Dynamics CRM 2011 仪表盘(dashbord)中加入公告(announcement)模块
具体步骤如下: 1.将一下代码黏贴入一个取名叫"announcementsondashboard.htm"的html文件中,当然文件名你随便起无所谓. <span style ...
- java工具类(四)之实现日期任意跳转
Java实现日期任意跳转 项目开发过程中,需要进行订单提醒日期的设置,主要包括设置每月指定的日期或者指定的天数,代码如下: public static String DateOperation(Str ...
- ITU-T G.1081 IPTV性能监测点 (Performance monitoring points for IPTV)
ITU-T 建议书 G.1081 IPTV性能监测点 Performance monitoring points for IPTV Summary Successful deployment of I ...
- linux下用gtk+写比赛赌博GUI小游戏
游戏界面全部由gtk的GUI完成,没有使用openGL之类的高端货. 游戏玩法就是8位选手比赛跑步,你可以在赛前赌哪位选手会赢,如果输了cash会被扣除,反之cash会增加. 无聊写了3个选项:小数时 ...