一、创建多线程应用程序
线程,也被称为轻量进程,指运行中程序的调度单位。目前大部分平台都支持多线程,允许程序中存在多个线程。在Windows操作系统的任务管理器中就可以查看线程,把选择列对话框的线程计数选上即能显示每个进程的线程数。
在本节的实例中,创建了一个最简单的多线程应用程序。在C#应用程序中,线程由Thread类表示,位于System.Threading命名空间下。线程的启动由Thread类的Start方法实现。线程的构造函数中一般是一个方法名,启动该线程即等于启动了该方法。
using System.Threading;
class Program
{
///<summary>
///主函数
///</summary>
static void Main(string[ ] args)
{
//定义一个线程变量t,构造函数中使用的参数是一个方法名
Thread t=new Thread(WriteHi);
t.Start();//启动该线程
//循环输出"Hello"字符串
while(true)
{
Console.Write("Hello");
}
}
///<summary>
///循环输出"Hi"
///</summary>
static void WriteHi()
{
while(true)
{
Console.Write("Hi");
}
}
}
程序运行结果为类似Hi Hi Hi Hi...........Hello Hello Hello...........Hi Hi Hi.........^C请按任意键继续
由于程序中没有设定结束循环的条件,因此必须通过按下"Ctrl+C"组合键终止程序。从本程序的输出结果可以看出,线程的运行方式是分时的,即每个线程轮流占有CPU,因此两个线程的输出时顺序进行的。
二、向线程传递参数
除了直接启动线程外,还可以在启动线程的时候向线程传递参数。这样,一些有参数的方法也可以进行多线程的应用。在C#中,要使用向线程传递参数的方式创建并启动线程,则该参数必须是一个Object类型,需要进行装箱和拆箱操作。
本节介绍如何在C#中向线程传递参数:
using System.Threading;
class program
{
///<summary>
///主函数
///</summary>
static void Main(string[ ] args)
{
//定义一个线程变量t,构造函数中使用的参数是一个方法名
Thread t=new Thread(SayHello);
//在启动线程的方法中加入一个参数,该参数即SayHello方法使用的参数
t.Start(true);
//以正常方式调用的SayHello方法
SayHello(false);
}
///<summary>
///输出函数
///</summary>
///<param name="isHello">判别输出方式</param>
static void SayHello(object isHello)
{
//首先将object型参数转换为bool型参数
bool hello=(bool)isHello;
//判断,true则输出Hello,否则输出Hi
if(hello)
{
Console.WriteLine("Hello");//输出Hello
}
else
{
Console.WriteLine("Hi");//输出Hi
}
}
}
结果为:
Hello
Hi
请按任意键继续。。。。
从结果中可以看到,程序正确地识别了传递到SayHello方法中的参数。