C#线程基础
2011-04-01 21:35 杨延成 阅读(945) 评论(0) 编辑 收藏 举报在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); } } } } |
运行效果如下图示
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· [AI/GPT/综述] AI Agent的设计模式综述