目录
1.线程传递参数
给线程传递一些数据可以采用两种方式。一种方式是使用带ParameterizedThreadStart委托参数的Thrad构造函数
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Threading;
// 线程传递参数
namespace C艹Demo
{
class Program
{
struct Data { public string aData; };
static void Main(string[] args)
{
// 线程
var d = new Data { aData = ("info") };
// lambda 表达式 =>左边是参数,右边是表达式或者语句块
// Thread thread = new Thread(() => ThreadMainWithParameters());
var thread = new Thread(ParameterizedThreadStart);
thread.Start(d);
// Console.WriteLine(bt.ToString());
Console.ReadKey();
}
// ThreadStart不能有参数
static void ParameterizedThreadStart(object o)
{
Data gate = (Data)o;
Console.WriteLine("Run thread object {0}", gate.aData);
}
}
}
另一种是创建自定义类,把线程方法当做实例,初始化实例数据。
// 线程实例化
namespace C艹Demo
{
public class myThread
{
private string strData;
public myThread(string str)
{
this.strData = str;
}
public void OutData()
{
Console.WriteLine("Out Data {0}", strData);
}
}
class Program
{
static void Main(string[] args)
{
myThread myThrad = new myThread("a2s1djask");
var thread = new Thread(myThrad.OutData);
thread.Start();
Console.ReadKey();
}
}
}
2.设置前台线程还是后台线程
1、当在主线程中创建了一个线程,那么该线程的IsBackground默认是设置为FALSE的。
2、当主线程退出的时候,IsBackground=FALSE的线程还会继续执行下去,直到线程执行结束。
3、只有IsBackground=TRUE的线程才会随着主线程的退出而退出。
4、当初始化一个线程,把Thread.IsBackground=true的时候,指示该线程为后台线程。后台线程将会随着主线程的退出而退出。
5、原理:只要所有前台线程都终止后,CLR就会对每一个活在的后台线程调用Abort()来彻底终止应用程序。
namespace C艹Demo
{
class Program
{
struct Data { public string aData; };
static void Main(string[] args)
{
// 线程在默认情况下,用Thread类创建的线程是前台线程.
// 线程池中的线程总是后台线程.IsBackground属性可以设置是前台还是后台
var thread = new Thread(ThreadParameters)
{ Name = "MyThread",IsBackground = false};
thread.Start();
// Console.ReadKey();
}
static void ThreadParameters()
{
Console.WriteLine("Run thread object {0}", Thread.CurrentThread.Name);
Thread.Sleep(3000);
Console.WriteLine("run {0} completed", Thread.CurrentThread.Name);
}
}
}