C#多线程实现详解:从无参到带参示例
180 浏览量
更新于2024-08-31
收藏 60KB PDF 举报
"C#使用多线程的几种方式示例详解"
在C#编程中,多线程是一种常见的技术,用于提高程序的并发执行能力,从而优化系统资源的利用和性能。本文将详细介绍如何在C#中使用多线程,并通过实例来帮助理解。
1. 不需要传递参数,也不需要返回参数
在C#中,如果线程任务不需要接收参数或返回结果,可以使用`ThreadStart`委托。`ThreadStart`定义了一个不带参数且无返回值的方法。下面是一个简单的示例:
```csharp
class Program
{
static void Main(string[] args)
{
for (int i = 0; i < 30; i++)
{
ThreadStart threadStart = new ThreadStart(Calculate);
Thread thread = new Thread(threadStart);
thread.Start();
}
Thread.Sleep(2000);
Console.Read();
}
public static void Calculate()
{
DateTime time = DateTime.Now; // 得到当前时间
Random ra = new Random(); // 随机数对象
Thread.Sleep(ra.Next(10, 100)); // 随机休眠一段时间
Console.WriteLine(time.Minute + ":" + time.Millisecond);
}
}
```
在这个例子中,`Calculate`方法被`ThreadStart`委托引用,创建新的线程并启动。每个线程独立运行,打印出不同时间戳。
2. 需要传递单个参数
如果线程任务需要接收参数,可以使用`ParameterizedThreadStart`委托。它接受一个`object`类型的参数,但没有返回值。下面是使用`ParameterizedThreadStart`的例子:
```csharp
class Program
{
static void Main(string[] args)
{
for (int i = 0; i < 30; i++)
{
ParameterizedThreadStart tStart = new ParameterizedThreadStart(Calculate);
Thread thread = new Thread(tStart);
thread.Start(i * 10 + 10); // 传递参数
}
Thread.Sleep(2000);
Console.Read();
}
public static void Calculate(object arg)
{
int parameter = (int)arg;
Random ra = new Random(); // 随机数对象
Thread.Sleep(ra.Next(10, 100)); // 随机休眠一段时间
Console.WriteLine("Parameter: " + parameter);
}
}
```
在这个例子中,`Calculate`方法接收一个`object`类型的参数,我们将整数值`i * 10 + 10`作为参数传递给线程。
除了直接使用`Thread`类创建线程,C#还提供了其他多线程机制,如:
- `ThreadPool`:线程池可以更有效地管理线程,复用已存在的线程,减少创建和销毁线程的开销。
- `Task`和`async/await`:这是.NET Framework 4.0引入的异步编程模型,允许开发者编写更简洁的并发代码,而无需直接处理线程。
总结,C#提供了多种创建和管理线程的方式,开发者可以根据具体需求选择合适的方法。在实际应用中,需要考虑到线程安全、同步以及资源管理等问题,以确保多线程程序的正确性和效率。通过理解和实践这些示例,你可以更好地掌握C#中的多线程编程。
点击了解资源详情
154 浏览量
点击了解资源详情
1452 浏览量
108 浏览量
2012-05-12 上传
336 浏览量
点击了解资源详情
点击了解资源详情

weixin_38715094
- 粉丝: 4
最新资源
- Realm实时地图视图集群ABFRealmMapView解析
- 全面详尽软件工程课件,自学软考必备资料
- VB编写的多班次企业轮值日历查询系统
- Upptime:自托管的开源正常运行时间监控与状态页面解决方案
- 浙江大学数据结构MOOC课件下载指南
- 乐鑫ESP射频测试及认证指南详解
- Python客户端简化Atlassian Stash REST API操作
- DWZShareKit:iOS端实现主流社交平台分享功能
- HTML基础与网页制作教程全解析
- 掌握GAWK:第4.2版AWK编程指南
- InsPro Disk:小巧实用的虚拟磁盘学习工具
- ASP网站注册自动生成二维码解决方案
- 打造电影数据库API:简化电影数据管理
- WN821N V4无线网卡驱动下载指南
- C#实现的双行显示简易计算器
- 晨风星号密码查看器:Windows平台下的密码恢复神器