一、多线程线程的内部结构的模拟
在这里主要模拟了线程执行不带参数的方法和执行不带参数的方法两种。
模拟代码如下:
//-------------执行不带参数的方法-----------
ThreadStart threads;
public MyThread(ThreadStart ts)//要求 用户在new的时候传入方法委托
{
this.threads = ts;//将委托 赋给全局变量
}
public void Start()
{
if (threads != null)
threads();//调用 委托,执行委托里的方法
else
pts(null);
}
//-------------执行带参数的方法-----------
ParameterizedThreadStart pts;
public MyThread(ParameterizedThreadStart pts)//要求 用户在new的时候传入方法委托
{
this.pts = pts;//将委托 赋给全局变量
}
public void Start(object o)
{
pts(o);//调用 委托,执行委托里的方法
}
二、多线程执行带参数的方法
在线程执行带参数的方法是要判断参数是否为null。
代码如下:
void SaiNi(object name)
{
if (name != null)//判断 是否传入参数
MessageBox.Show("您好--" + name);
else
MessageBox.Show("null");
}
private void btnThreadParatton_Click(object sender, EventArgs e)
{
//创建线程
Thread threadFrist = new Thread(ChangTxt);
threadFrist.IsBackground = true;//把线程设置为后台线程
threadFrist.Start(txtNameN.Text.ToString().Trim());//开启线程 传入参数
}
三、多线程执行带多个参数的方法
当线程执行带多个参数的方法时,在这里传入的是一个泛型集合。
代码如下:
//----------------------执行带多个参数的方法---------
void SaiNi(object name)
{
List<string> lst = name as List<string>;
if (lst != null)//判断 是否传入参数
{
foreach (string s in lst)
{
MessageBox.Show("您好---"+s);
}
}
else
MessageBox.Show("null");
}
private void btnThreadParatton1_Click(object sender, EventArgs e)
{
//创建线程
Thread threadFrist = new Thread(ChangTxt);
threadFrist.IsBackground = true;//把线程设置为后台线程
threadFrist.Start(new List<string> { "赵雅芝","张国荣","张曼玉"});//开启线程 传入参数
}
|