使用Thread类可以创建和控制线程
2013-08-08 13:38
357 查看
1.创建线程
[c-sharp] view plaincopyprint?
static void Main(string[] args)
{
/* Thread类
* 创建控制线程
* 其构造函数接受ThreadStart和ParameterizedThreadStart类型的委托参数
*/
Thread t1 = new Thread(ThreadMain);
t1.Name = "66";
//创建了线程后,可以用Start()方法启动线程啦^-^
t1.Start();
Console.WriteLine("主线程");
/* 使用λ表达式创建线程更简洁 */
Thread t2 = new Thread(() => Console.WriteLine("t2线程"));
t2.Start();
//这个就更简洁 ≡(▔﹏▔)≡
new Thread(() => Console.WriteLine("t3线程")).Start();
Console.ReadLine();
/* 得到结果不能保证哪个结果先输出
* 线程由操作系统调度,每次哪个线程在前不同的
*/
}
//线程中通过委托ThreadStart调用的方法
static void ThreadMain()
{
Console.WriteLine("t1线程,线程名:" + Thread.CurrentThread.Name + ",该线程托管ID:" + Thread.CurrentThread.ManagedThreadId);
}
方法二:创建一个定制类,把线程的方法定义为实例方法,给线程传送数据
[c-sharp] view plaincopyprint?
//定制类
public class MyThread
{
private string data;
public MyThread(string data)
{
this.data = data;
}
//线程中通过委托ThreadStart调用的定制类中的实例方法
public void ThreadMain()
{
Console.WriteLine("线程t1,传入参数:" + data);
}
}
class Program
{
static void Main(string[] args)
{
/* 创建一个定制类,把线程的方法定义为实例方法,给线程传送数据 */
MyThread obj = new MyThread("66");
Thread t1 = new Thread(obj.ThreadMain);
t1.Start();
Console.ReadLine();
}
}
//定制类
public class MyThread
{
private string data;
public MyThread(string data)
{
this.data = data;
}
//线程中通过委托ThreadStart调用的定制类中的实例方法
public void ThreadMain()
{
Console.WriteLine("线程t1,传入参数:" + data);
}
}
class Program
{
static void Main(string[] args)
{
/* 创建一个定制类,把线程的方法定义为实例方法,给线程传送数据 */
MyThread obj = new MyThread("66");
Thread t1 = new Thread(obj.ThreadMain);
t1.Start();
Console.ReadLine();
}
}
[c-sharp] view plaincopyprint?
static void Main(string[] args)
{
/* Thread类
* 创建控制线程
* 其构造函数接受ThreadStart和ParameterizedThreadStart类型的委托参数
*/
Thread t1 = new Thread(ThreadMain);
t1.Name = "66";
//创建了线程后,可以用Start()方法启动线程啦^-^
t1.Start();
Console.WriteLine("主线程");
/* 使用λ表达式创建线程更简洁 */
Thread t2 = new Thread(() => Console.WriteLine("t2线程"));
t2.Start();
//这个就更简洁 ≡(▔﹏▔)≡
new Thread(() => Console.WriteLine("t3线程")).Start();
Console.ReadLine();
/* 得到结果不能保证哪个结果先输出
* 线程由操作系统调度,每次哪个线程在前不同的
*/
}
//线程中通过委托ThreadStart调用的方法
static void ThreadMain()
{
Console.WriteLine("t1线程,线程名:" + Thread.CurrentThread.Name + ",该线程托管ID:" + Thread.CurrentThread.ManagedThreadId);
}
[c-sharp] view plaincopyprint? class Program { static void Main(string[] args) { /* 使用带ParameterizedThreadStart委托参数的Thread构造函数,给线程传送数据 */ //初始化给线程传送的数据 Data d = new Data(); d.Message = "66"; Thread t1 = new Thread(ThreadMainWithParameters); //使用了ParameterizedThreadStart委托,线程入口必有一object类型参数 t1.Start(d); Console.ReadLine(); } //线程中通过委托ParameterizedThreadStart调用的方法 static void ThreadMainWithParameters(object o) { Data d = (Data)o; Console.WriteLine("线程t1,传入参数:" + d.Message); } } //给线程传送数据,需要某个存储数据的类或结构 public struct Data { public string Message; } class Program { static void Main(string[] args) { /* 使用带ParameterizedThreadStart委托参数的Thread构造函数,给线程传送数据 */ //初始化给线程传送的数据 Data d = new Data(); d.Message = "66"; Thread t1 = new Thread(ThreadMainWithParameters); //使用了ParameterizedThreadStart委托,线程入口必有一object类型参数 t1.Start(d); Console.ReadLine(); } //线程中通过委托ParameterizedThreadStart调用的方法 static void ThreadMainWithParameters(object o) { Data d = (Data)o; Console.WriteLine("线程t1,传入参数:" + d.Message); } } //给线程传送数据,需要某个存储数据的类或结构 public struct Data { public string Message; }
方法二:创建一个定制类,把线程的方法定义为实例方法,给线程传送数据
[c-sharp] view plaincopyprint?
//定制类
public class MyThread
{
private string data;
public MyThread(string data)
{
this.data = data;
}
//线程中通过委托ThreadStart调用的定制类中的实例方法
public void ThreadMain()
{
Console.WriteLine("线程t1,传入参数:" + data);
}
}
class Program
{
static void Main(string[] args)
{
/* 创建一个定制类,把线程的方法定义为实例方法,给线程传送数据 */
MyThread obj = new MyThread("66");
Thread t1 = new Thread(obj.ThreadMain);
t1.Start();
Console.ReadLine();
}
}
//定制类
public class MyThread
{
private string data;
public MyThread(string data)
{
this.data = data;
}
//线程中通过委托ThreadStart调用的定制类中的实例方法
public void ThreadMain()
{
Console.WriteLine("线程t1,传入参数:" + data);
}
}
class Program
{
static void Main(string[] args)
{
/* 创建一个定制类,把线程的方法定义为实例方法,给线程传送数据 */
MyThread obj = new MyThread("66");
Thread t1 = new Thread(obj.ThreadMain);
t1.Start();
Console.ReadLine();
}
}
相关文章推荐
- MFC中CreatThread()创建线程使用详解
- Factory 定义一个接口,客户可以使用这个接口创建一个对象.同时,我们还可以控制对那个类进行实例化
- Java并发编程-05-使用ThreadFactory创建新线程
- C#基础:使用Thread创建线程
- java多线程编程之使用thread类创建线程
- python 8-1 如何使用多线程,Thread创建线程,执行函数赋值给target//类+函数放在run方法中执行
- 使用BackGroundWorker在多线程中访问Winform控件,当不是创建这个控件的线程访问控件时,把线程调整到是创建这个控件的线程去控制。,代码为红色的
- C#多线程开发1:使用Thread类创建与启动线程
- [非技术参考]C#基础:使用Thread创建线程(1)
- WPF中使用Free解决访问非UI线程创建的对象抛出的Thread异常
- Java使用ThreadFactory来创建新的线程
- java并发编程---如何创建线程以及Thread类的使用
- 多线程Thread与后台线程setDaemon,使用Runnable接口创建多线程
- C#基础:使用Thread创建线程
- 只有线程在创建时命名,才可以用Thread.getName();方法获得名称。。。。
- [ACE程序员教程笔记]使用ACE_Thread创建多个线程
- 01使用Win32 API创建、销毁线程——控制进度条
- 谨慎使用DLL_THREAD_ATTACH,以及利用DLL_THREAD_ATTACH来阻止远程线程的创建执行
- 使用Thread创建线程
- C# 多线程开发 1:使用 Thread 类创建与启动线程