.NET已经提供非常好的框架,开发人员只需指定好线程的主入口,即一个对象的方法即可。不过,这个方法通过ThreadStart和ParameterizedThreadStart委托来实现。代码事例如下:
class Program
{
static void
{
//启动一个线程
ThreadStart threadStart1 = new ThreadStart(Worker.DoWork);
Thread newThread = new Thread(threadStart1);
newThread.Start();
//通过参数化线程委托启动一个线程
ParameterizedThreadStart parameterizedThreadStart = new ParameterizedThreadStart(Worker.DoWork);
Thread thread = new Thread(parameterizedThreadStart);
thread.Start("Hello World!");
}
}
public class Worker
{
public static void DoWork()
{
try
{
Thread.Sleep(int.MaxValue);
Console.WriteLine("Static thread procedure.");
}
catch(Exception ex)
{
Console.WriteLine("Thread Exception is {0}",ex);
}
}
public string Data;
public void DoWorkByParameterized()
{
Console.WriteLine("Instance thread procedure. Data={0}", Data);
}
public static void DoWork(object data)
{
Console.WriteLine("Static thread procedure. Data='{0}'",
data);
}
//因为这个数据成员要被多线程使用。
private volatile bool shouldStop;
// 当线程启动时,被调用。这个方法相当于主线程的Main入口
public void DoWorkByVariable()
{
while (!shouldStop)
{
Console.WriteLine("worker thread: working...");
}
Console.WriteLine("worker thread: terminating gracefully.");
}
public void RequestStop()
{
shouldStop = true;
}
}
ThreadStart和ParameterizedThreadStart都是委托类型,最大区别在于ThreadStart不支持带参启动,为实现这个目标,可以通过对象属性和构造函函数解决。事例代码如下:
浙公网安备 33010602011771号