[参考自:http://www.cnblogs.com/leslies2/archive/2012/02/07/2310495.html]
namespace CSharp多线程
{
public class Message
{
public void ShowMessage()
{
string message = string.Format("Async threadId is :{0}", Thread.CurrentThread.ManagedThreadId);
Console.WriteLine(message);
for (int n = 0; n < 10; n++)
{
Thread.Sleep(300);
Console.WriteLine("The Number is:" + n.ToString());
}
}
}
public class Person
{
public string name;
public int age;
}
public class Message1
{
public void ShowMessage(object person)
{
if (person != null)
{
Person _person = (Person)person;
string message = string.Format("\n{0}'s age is {1}!\nnAsync threadId is {2}", _person.name, _person.age, Thread.CurrentThread.ManagedThreadId);
Console.WriteLine(message);
}
for (int n = 0; n < 10; n++)
{
Thread.Sleep(300);
Console.WriteLine("The number is:" + n.ToString());
}
}
}
class Program
{
static void AsyncThread()
{
try
{
string message = string.Format("\nAsyncThread Id is :{0}", Thread.CurrentThread.ManagedThreadId);
Console.WriteLine(message);
for (int i = 0; i < 10; i++)
{
if (i > 4)
{
Thread.CurrentThread.Abort(i);
}
Thread.Sleep(300);
Console.WriteLine("The number is :" + i.ToString());
}
}
catch (ThreadAbortException ex)
{
if (ex.ExceptionState != null)
{
Console.WriteLine("Thread abort when the number is : {0}", ex.ExceptionState.ToString());
}
Thread.ResetAbort();
Console.WriteLine("Thread RestAbort!");
}
Console.WriteLine("Thread Closed!");
}
static void Main()
{
//1,thread start委托 实现多线程
Console.WriteLine("Main Thread is:" + Thread.CurrentThread.ManagedThreadId);
Message message = new Message();
Thread thread = new Thread(new ThreadStart(message.ShowMessage));
thread.Start();
Console.WriteLine("Do......");
Console.WriteLine("Main Thread working is complete!");
//2,使用ParameterizedThreadStart委托
Message1 message1 = new Message1();
Person person = new Person();
person.name = "lwf";
person.age = 1000;
Thread thread1 = new Thread(new ParameterizedThreadStart(message1.ShowMessage));
thread1.Start(person);
Console.WriteLine("Do.....");
Console.WriteLine("Main Thread working is complete");
thread1.Join();//保证主线程在异步线程thread1结束后才终止
//3,终止线程Abort
Console.WriteLine("Main threadId is:" + Thread.CurrentThread.ManagedThreadId);
Thread thread2 = new Thread(new ThreadStart(AsyncThread));
thread2.IsBackground = true; //把线程设置为后台线程,主线程不会等待后台线程结束
thread2.Start();
thread2.Join();
//CLR线程池
// int a, b;
// ThreadPool.SetMaxThreads(1024, 1024); //设置线程池最大线程数
// ThreadPool.GetMaxThreads(out a, out b);//获得线程池最大线程数量
// Console.WriteLine(a.ToString() + " " + b.ToString());
//通过ThreadPool.QueueUserWorkItem(WaitCallback)创建线程
// ThreadPool.QueueUserWorkItem(new WaitCallback(AsyncCallback));
// ThreadPool.QueueUserWorkItem(new WaitCallback(AsyncCallback),object)
}
}
}