您的位置:首页 > 编程语言 > C#

C#线程基础

2011-04-01 21:35 169 查看
在C#应用程序里,经常会用到线程,如在复杂的数据计算时,还要响应客户的其它请求。

先不说些了,先来点基础知识。以下摘自MSDN

线程处理使 C# 程序能够执行并发处理,以便您可以同时执行多个操作。例如,您可以使用线程处理来监视用户输入,执行后台任务,以及处理并发输入流。System.Threading 命名空间提供支持多线程编程的类和接口,使您可以轻松地执行创建和启动新线程,同步多个线程,挂起线程以及中止线程等任务。

在创建操作系统进程时,操作系统将插入一个线程以执行该进程(包括任何原始应用程序域)中的代码。 从此刻起,就可以创建和销毁应用程序域,而不必创建或销毁任何操作系统线程。 如果正在执行的代码是托管代码,则可以通过检索类型为 Thread 的静态 CurrentThread 属性来获取正在当前应用程序域中执行的线程的 Thread 对象。

注:进程可以简单理解为他是包含了多个线程的单元。

创建新的 Thread 对象时,将创建新的托管线程。Thread 类具有接受一个 ThreadStart 委托或ParameterizedThreadStart 委托的构造函数:该委托包装调用 Start 方法时由新线程调用的方法。 多次调用 Start 将引发 ThreadStateException。

Start 方法立即返回,经常是在实际启动新线程之前。 可以使用 ThreadState 和 IsAlive 属性确定任何时刻的线程状态,但是绝不应该将这些属性用于同步线程活动。

再看一下代码的演示:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;

namespace ThreadDemo
{
class Program
{
static void Main(string[] args)
{
MyThread myThread = new MyThread();
///空参实例化线程
///用实例化的委托ThreadStart来构造
///委托原型:public delegate void ThreadStart()
///实例化委托时,要用一个空参的方法来构造
Thread subThreadOne = new Thread(new ThreadStart(myThread.Run));

///参数数实例化线程
///委托原型:public delegate void ParameterizedThreadStart(object obj);
///实例化委托时,要用带一个object类型参数的方法来构造
Thread subThreadTwo=new Thread(new ParameterizedThreadStart(myThread.Run));
//启动子线程1
subThreadOne.Start();

///线程启动时,传参数
string mes = "ParameterizedThreadStart";
subThreadTwo.Start(mes);
for (int i = 0; i < 5; i++)
{
//当前线程(主线程)睡眠
Thread.Sleep(2);
Console.WriteLine("main thread。。。");
}
//放弃子线程1
subThreadOne.Abort();
//放弃子线程2
subThreadTwo.Abort();
}
}
class MyThread
{
public void Run()
{
while (true)
{
Console.WriteLine("The First Sub Thread Run....");
//当前线程(子线程1)睡眠
Thread.Sleep(5);
}
}
public void Run(object obj)
{
while (true)
{
Console.WriteLine(string.Format("The Second Sub Thread Run....{0}",obj.ToString()));
//当前线程(子线程2)睡眠
Thread.Sleep(5);
}
}
}
}


运行效果如下图示

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: