为线程传递参数,在实际应用中,线程需要得到运行时的参数,然后,在执行相关程序任务。如何为线程执行前,将线程方法中需要的数据进行传递呢?本文将介绍该方法。

  有两种方式可以为线程传递相关的参数。我们逐一进行介绍。

1.使用带ParameterizedThreadStart委托参数的Thread构造函数

例子:

1.Thread参数调用

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;

namespace ThreadTest
{
class Program
{
static void Main(string[] args)
{
// 使用带ParameterizedThreadStart委托参数的Thread构造函数
Thread t2 = new Thread(ThreadParams);
ThreadParams param= new ThreadParams(1, "Tom");
t2.Start(param);

}

static void ThreadParams(object param)
{
ThreadParams obj = param as ThreadParams;
Console.WriteLine(obj.SID);
Console.WriteLine(obj.SName);
}

}
}

现在,ThreadParams 类为:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace ThreadTest
{
/// <summary>
/// 线程要传递的参数
/// </summary>
public class ThreadParams
{

public ThreadParams(int sId, string sName)
{
SID = sId;
SName = sName;
}

public int SID { get; set; }
public string SName { get;set;}
}
}



首先,Thread类中的构造函数:public Thread(ParameterizedThreadStart start);该构造函数的ParameterizedThreadStart 为一个委托类型。

  ParameterizedThreadStart委托的方法签名为:public delegate void ParameterizedThreadStart(object obj);所以要声明符合该签名的方法。

static void ThreadParams(object param);

  t2.Start(param);启动线程,并且将参数(param)传递给方法ThreadParams(object param)。这样在static void ThreadParams(object param)方法中就可以使用所传递的方法。

2.定义一个类,在其中定义需要的数据,将线程的主方法定义为类的实例方法。

先看代码:

1.参数类,指定了线程需要的参数。

View Code
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace ThreadTest
{
/// <summary>
/// 学生类
/// </summary>
public class Students
{
private int _sId;
private string _sName;

public int SId
{
get { return _sId; }
set { _sId = value; }
}

public string SName
{
get { return _sName; }
set { _sName = value; }
}

public Students(int sId, string sName)
{
this._sId = sId;
this._sName = sName;

}

public void ShowInfo()
{
Console.WriteLine(_sId);
Console.WriteLine(_sName);
}

}
}

2.实例化Students类的实例方法,并且将线程开始执行的方法定义为实例方法。

View Code
using System;
using System.Collections.Generic;
using System.Text;
using System.Threading;

namespace ThreadTest
{
class Program
{
static void Main(string[] args)
{

// 给线程传递参数 2.定义一个类,在其中定义需要的数据,将线程的主方法定义为类的实例方法。
Students stu = new Students(2, "Jim");
Thread t3 = new Thread(stu.ShowInfo);
t3.Start();
Console.ReadLine();

}

}
}

注意:该方式应该先实例化类,然后在启动线程。


posted on 2012-01-15 23:07  金丝猴  阅读(171)  评论(0编辑  收藏  举报