// ParameterizedThreadStart.cs
public delegate void ParameterizedThreadStart<T>(T value);
// ParameterizedThread.cs
using System.Threading;
public class ParameterizedThread<T>
{
private ParameterizedThreadStart<T> parameterizedThreadStart;
private Thread thread;
public ParameterizedThread(ParameterizedThreadStart<T> start)
{
parameterizedThreadStart = start;
thread = new Thread(new ParameterizedThreadStart(Start));
}
public Thread Thread
{
get { return thread; }
}
private void Start(object obj)
{
parameterizedThreadStart.Invoke((T)obj); // Unboxing
}
public void Start(T value)
{
thread.Start(value); // Boxing
}
}
示例:
using System;
using System.Threading;
class Program
{
static void Main(string[] args)
{
Console.WriteLine("Thread ID: {0}, Start", Thread.CurrentThread.ManagedThreadId);
ParameterizedThread<string> threadOne = new ParameterizedThread<string>(
new ParameterizedThreadStart<string>(WriteValue));
ParameterizedThread<int> threadTwo = new ParameterizedThread<int>(
new ParameterizedThreadStart<int>(WriteValue));
threadOne.Start("Hello World");
threadTwo.Start(123);
Console.ReadKey();
}
static void WriteValue<T>(T value)
{
Console.WriteLine("Thread ID: {0}, {1}", Thread.CurrentThread.ManagedThreadId, value);
}
}