C#多线程实现详解:从无参到带参示例

3 下载量 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#中的多线程编程。