网站首页 > 文章精选 正文
在 C# 中,可以使用 System.Threading.Thread 类创建并启动一个新的线程。以下是创建和启动线程的方式以及示例代码:
创建并启动线程的步骤
- 创建线程对象创建一个 Thread 对象,并指定线程运行的方法(委托)。
- 启动线程使用 Thread.Start() 方法启动线程。
- 线程方法线程执行的方法必须是无参数方法,或者使用 ParameterizedThreadStart 传递参数。
示例 1:创建无参数线程
using System;
using System.Threading;
class Program
{
static void Main()
{
// 创建线程,指定线程运行的方法
Thread thread = new Thread(PrintNumbers);
// 启动线程
thread.Start();
// 主线程继续运行
Console.WriteLine("Main thread is running...");
}
// 线程运行的方法
static void PrintNumbers()
{
for (int i = 1; i <= 5; i++)
{
Console.WriteLine(#34;Thread: {i}");
Thread.Sleep(500); // 模拟任务执行,暂停 500 毫秒
}
}
}
输出示例:
Main thread is running...
Thread: 1
Thread: 2
Thread: 3
Thread: 4
Thread: 5
示例 2:创建带参数的线程
使用 ParameterizedThreadStart 或 Lambda 表达式为线程传递参数。
方法一:ParameterizedThreadStart
using System;
using System.Threading;
class Program
{
static void Main()
{
// 创建线程,使用 ParameterizedThreadStart 传递参数
Thread thread = new Thread(PrintMessage);
thread.Start("Hello from the thread!");
Console.WriteLine("Main thread is running...");
}
// 接收参数的线程方法
static void PrintMessage(object message)
{
Console.WriteLine(#34;Thread message: {message}");
}
}
方法二:Lambda 表达式
using System;
using System.Threading;
class Program
{
static void Main()
{
// 使用 Lambda 表达式创建线程
Thread thread = new Thread(() =>
{
Console.WriteLine("Hello from the thread!");
});
thread.Start();
Console.WriteLine("Main thread is running...");
}
}
示例 3:使用线程控制(Join 和 IsAlive)
Join
Thread.Join() 等待线程执行完成。
using System;
using System.Threading;
class Program
{
static void Main()
{
Thread thread = new Thread(PrintNumbers);
thread.Start();
Console.WriteLine("Waiting for the thread to complete...");
thread.Join(); // 等待线程执行完成
Console.WriteLine("Thread completed.");
}
static void PrintNumbers()
{
for (int i = 1; i <= 3; i++)
{
Console.WriteLine(#34;Thread: {i}");
Thread.Sleep(500);
}
}
}
IsAlive
检查线程是否仍在运行。
using System;
using System.Threading;
class Program
{
static void Main()
{
Thread thread = new Thread(PrintNumbers);
thread.Start();
while (thread.IsAlive)
{
Console.WriteLine("Thread is still running...");
Thread.Sleep(200);
}
Console.WriteLine("Thread has finished.");
}
static void PrintNumbers()
{
Thread.Sleep(1000);
Console.WriteLine("Thread task completed.");
}
}
注意事项
- 线程生命周期
- 使用 Thread.Join() 可以等待线程完成。
- 检查 Thread.IsAlive 可以判断线程是否正在运行。
- 线程安全
- 多线程访问共享资源时,需使用同步机制(如 lock)避免数据竞争。
- 后台线程
- 设置 Thread.IsBackground = true 将线程标记为后台线程,主线程退出时后台线程会自动终止。
- 推荐使用 Task
- 在现代 C# 开发中,推荐使用 Task 或异步编程模型(async/await),它们提供了更高级的并发编程方式。
总结
通过 System.Threading.Thread 类,您可以轻松地创建和启动线程,并对其进行控制。然而,在大多数情况下,使用 Task 或线程池更适合现代应用程序的需求,因为它们提供了更高的抽象和更好的资源管理。
猜你喜欢
- 2024-12-27 Python启航:30天编程速成之旅(第23天)- 多线程从入门到精通
- 2024-12-27 10问10答:你真的了解线程池吗? 线程池的用法、原理
- 2024-12-27 线程池最佳线程数量到底要如何配置?
- 2024-12-27 线程池的创建方式,为什么阿里推荐自定义线程池?
- 2024-12-27 如何在C#中创建和使?线程池?请提供?例代码
- 2024-12-27 多线程编程 - 创建线程和结束线程
- 2024-12-27 Java面试篇基础部分-Java创建线程详解
- 2024-12-27 创建线程池有哪几种方式? 44.创建线程池有哪几种方式?
- 2024-12-27 创建线程池的4大方法,7个参数,4种拒绝策略
- 2024-12-27 进程、线程的创建和派生详细过程 线程进程定义
- 最近发表
- 标签列表
-
- newcoder (56)
- 字符串的长度是指 (45)
- drawcontours()参数说明 (60)
- unsignedshortint (59)
- postman并发请求 (47)
- python列表删除 (50)
- 左程云什么水平 (56)
- 计算机网络的拓扑结构是指() (45)
- 稳压管的稳压区是工作在什么区 (45)
- 编程题 (64)
- postgresql默认端口 (66)
- 数据库的概念模型独立于 (48)
- 产生系统死锁的原因可能是由于 (51)
- 数据库中只存放视图的 (62)
- 在vi中退出不保存的命令是 (53)
- 哪个命令可以将普通用户转换成超级用户 (49)
- noscript标签的作用 (48)
- 联合利华网申 (49)
- swagger和postman (46)
- 结构化程序设计主要强调 (53)
- 172.1 (57)
- apipostwebsocket (47)
- 唯品会后台 (61)
- 简历助手 (56)
- offshow (61)