C#多线程实现详解:从无参到带参示例
31 浏览量
更新于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#中的多线程编程。
2010-06-15 上传
2010-01-14 上传
2020-12-31 上传
2012-05-12 上传
点击了解资源详情
点击了解资源详情
点击了解资源详情
点击了解资源详情
2020-09-04 上传
weixin_38715094
- 粉丝: 4
- 资源: 916
最新资源
- Fisher Iris Setosa数据的主成分分析及可视化- Matlab实现
- 深入理解JavaScript类与面向对象编程
- Argspect-0.0.1版本Python包发布与使用说明
- OpenNetAdmin v09.07.15 PHP项目源码下载
- 掌握Node.js: 构建高性能Web服务器与应用程序
- Matlab矢量绘图工具:polarG函数使用详解
- 实现Vue.js中PDF文件的签名显示功能
- 开源项目PSPSolver:资源约束调度问题求解器库
- 探索vwru系统:大众的虚拟现实招聘平台
- 深入理解cJSON:案例与源文件解析
- 多边形扩展算法在MATLAB中的应用与实现
- 用React类组件创建迷你待办事项列表指南
- Python库setuptools-58.5.3助力高效开发
- fmfiles工具:在MATLAB中查找丢失文件并列出错误
- 老枪二级域名系统PHP源码简易版发布
- 探索DOSGUI开源库:C/C++图形界面开发新篇章