多重影分身——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,调用了子窗 ...
随机推荐
- 如何解决RK3168或者RK系列MASKROM的问题
不知道使用RK芯片的小伙伴有没有遇到我这样的问题,在用Android-Tool下载相应 IMG的时候,正常情况下,按电源键和音量+键应该出现loader下载模式,但是却出现MASKROM的字样,以前不 ...
- Mybatis执行BatchExecutor(四)
BatchExecutor:顾名思义就是进行批量操作,通过批量操作来提高性能 public class BatchExecutor extends BaseExecutor { public stat ...
- EBS Form个性化的工作原理
Form的个性化是EBS的比较好用的一个东西.好像很少人研究它的工作原理,都是直接用.最近有个同事问我问题,说他在个性化编写的代码无效果.解决之后,才发现,原来传说中的EBS的Form的个性化是这样子 ...
- Android项目-高考作文项目架构(二)
1, 普通的http json请求 请看下面架构草图: 这样就抽象出了其他Activity可能需要的Http Json请求的功能. 只要其他Activity有Http Json请求的需求都可以继承Ba ...
- javascript之DOM编程正则表达式引入
在javascript中,正则表达式和java中区别不大.只有一小部分不同的地方: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Trans ...
- android 签名
(1)Android Studio菜单Build->Generate Signed APK (2)弹出窗口 (3)创建密钥库及密钥,创建后会自动选择刚创建的密钥库和密钥(已拥有密钥库跳过) ...
- sed命令 linux
sed 实用工具是一个"编辑器",但它与其它大多数编辑器不同.除了不面向屏幕之外,它还是非交互式的.这意味着您必须将要对数据执行的命令插入到命令行或要处 理的脚本中.当显示它时,请 ...
- 学习pthreads,使用互斥量进行同步
在进行多线程编程时,我们总会遇到全局变量和数据结构的问题,这是多线程之间进行通信的问题.如果多个线程同时读写一个全局变量,那么会造成竞争或者出错.为了解决这一问题,我们需要对全局数据进行,使用互斥量实 ...
- android的Binder通信机制java层浅谈-android学习之旅(88)
1.Service Manager的Java代理对象 在Java层中,Service Manager的代理对象类型为ServiceManagerProxy.它继承并且实现了IServiceManage ...
- visual svn使用教程
SVN简介: 为什么要使用SVN? 程序员在编写程序的过程中,每个程序员都会生成很多不同的版本,这就需要程序员有效的管理代码,在需要的时候可以迅速,准确取出相应的版本. Subversion是什 ...