using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;
namespace ConsoleApplication1
{
/// <summary>
/// 声明一个委托
/// </summary>
/// <param name="Diameter"></param>
/// <returns></returns>
delegate double CalculateMethod(double Diameter);
class Program
{
/// <summary>
/// 定义委托对象
/// </summary>
public static CalculateMethod calcMethod;
/// <summary>
/// 计算结果
/// </summary>
public static double result = 0;
static void Main(string[] args)
{
/***********一、简单线程***********/
//ThreadStart threadStart = new ThreadStart(Calculate);
//Thread thread = new Thread(threadStart);
//thread.Start();
/***********二、线程传递单个参数******************/
//使用这个这个委托定义的线程的启动函数可以接受一个输入参数
//ParameterizedThreadStart threadStart = new ParameterizedThreadStart(Calculate);
//Thread thread = new Thread(threadStart);
//thread.Start(0.9);
/***********三、线程使用线程类调用方法******************/
//MyThread t = new MyThread(5.0);
//ThreadStart threadStart = new ThreadStart(t.Calculate);
//Thread thread = new Thread(threadStart);
//thread.Start();
/***********四、把参数传递变成了属性共享,把逻辑和逻辑涉及的数据封装在一起(匿名方法)******************/
//double Diameter = 0.9d;
//Thread thread = new Thread(new ThreadStart(delegate()
//{
// Console.WriteLine("Calculate Start");
// Thread.Sleep(2000);
// Console.WriteLine("匿名方法: The perimeter Of Circle with a Diameter of {0} is {1}", Diameter, Diameter * Math.PI); ;
// Console.Read();
//}));
//thread.Start();
/***********王、线程池******************/
WaitCallback w = new WaitCallback(Calculate);
ThreadPool.QueueUserWorkItem(w, 1.0);
ThreadPool.QueueUserWorkItem(w, 2.0);
ThreadPool.QueueUserWorkItem(w, 3.0);
ThreadPool.QueueUserWorkItem(w, 4.0);
}
/// <summary>
/// 简单线程调用方法
/// </summary>
/// <param name="arg"></param>
public static void Calculate()
{
double Diameter = 0.9d;
Console.WriteLine("Calculate Start");
Thread.Sleep(2000);//睡2秒
Console.Write("简单线程:The perimeter Of Circle with a Diameter of {0} is {1}", Diameter, Diameter * Math.PI);
Console.Read();
}
/// <summary>
/// 传递单个参数线程启用方法
/// </summary>
/// <param name="arg"></param>
public static void Calculate(object arg)
{
double Diameter = (double)arg;
Console.WriteLine("Calculate Start");
Thread.Sleep(2000);//睡2秒
Console.Write("线程传递单个参数:The perimeter Of Circle with a Diameter of {0} is {1}", Diameter, Diameter * Math.PI);
Console.Read();
}
/// <summary>
/// 线程池调用方法
/// </summary>
/// <param name="Diameter"></param>
/// <returns></returns>
public static void Calculate(double Diameter)
{
Console.WriteLine("Calculate Start");
Thread.Sleep(2000);//睡2秒
Console.Write("线程传递单个参数:The perimeter Of Circle with a Diameter of {0} is {1}", Diameter, Diameter * Math.PI);
Console.Read();
}
}
/// <summary>
/// 线程类(将线程要执行的方法和它需要的参数封装到类)
/// </summary>
public class MyThread
{
public double Diameter = 10;
public double Result = 0;
public MyThread(double Diameter)
{
this.Diameter = Diameter;
}
public void Calculate()
{
Console.WriteLine("Calculate Start");
Thread.Sleep(2000);//睡2秒
Console.WriteLine("Calculate End, Diameter is {0},Result is {1}", this.Diameter, Diameter * Math.PI);
Console.Read();
}
}
}