C#线程启动的几种实现方法小结

 更新时间:2025年07月04日 10:03:59   作者:CoderIsArt  
在C#中创建新线程执行代码的几种方法,包括Thread、Task、ThreadPool等,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

在 C# 中,单独开一个线程运行一段代码(如执行一句话)有多种方式,具体取决于使用的 .NET 版本和需求。以下是几种常见方法:

方法 1:使用Thread类(传统方式)

适用于所有 .NET 版本,但较底层。

using System.Threading;

// 定义一个方法,包含要执行的代码
void DoWork()
{
    Console.WriteLine("这句话在新线程中运行!");
}

// 创建并启动线程
Thread thread = new Thread(DoWork);
thread.Start(); // 启动线程

// 可选:设置为后台线程(程序退出时自动结束)
thread.IsBackground = true;

方法 2:使用Task(推荐,.NET 4.0+)

更现代的方式,基于线程池,适合异步操作。

using System.Threading.Tasks;

Task.Run(() => 
{
    Console.WriteLine("这句话在Task线程池中运行!");
});

// 或者异步方法
async Task ExecuteAsync()
{
    await Task.Run(() => Console.WriteLine("异步线程执行!"));
}
await ExecuteAsync();

优点

  • 自动管理线程池,避免频繁创建/销毁线程。
  • 支持 async/await 异步编程。

方法 3:ThreadPool(线程池)

适合短期任务,避免手动创建线程。

using System.Threading;

ThreadPool.QueueUserWorkItem(_ => 
{
    Console.WriteLine("这句话在线程池中运行!");
});

// 或者带参数
ThreadPool.QueueUserWorkItem(state => 
{
    Console.WriteLine($"参数: {state}");
}, "Hello");

适用场景

  • 简单、短生命周期的任务。
  • 不适合长时间运行的任务(可能阻塞线程池)。

方法 4:BackgroundWorker(WinForms/WPF 专用)

适合需要在 UI 线程中更新界面的场景。

using System.ComponentModel;

var worker = new BackgroundWorker();
worker.DoWork += (sender, e) => 
{
    Console.WriteLine("这句话在BackgroundWorker中运行!");
};
worker.RunWorkerAsync(); // 启动

方法 5:.NET 6+ 的Parallel.Invoke

如果只是简单并行执行代码块:

Parallel.Invoke(() => 
{
    Console.WriteLine("这句话在并行任务中运行!");
});

如何选择?

方法适用场景备注
Thread需要精确控制线程(如优先级、前台/后台)底层,不推荐频繁使用
Task现代异步编程(推荐)默认用线程池,支持 async/await
ThreadPool短期任务避免阻塞线程池
BackgroundWorkerWinForms/WPF 后台任务自动回调 UI 线程
Parallel.Invoke简单并行执行适合 CPU 密集型任务

完整示例(控制台应用)

using System;
using System.Threading;
using System.Threading.Tasks;

class Program
{
    static void Main()
    {
        // 方法1:Thread
        new Thread(() => Console.WriteLine("Thread方式")).Start();

        // 方法2:Task
        Task.Run(() => Console.WriteLine("Task方式"));

        // 方法3:ThreadPool
        ThreadPool.QueueUserWorkItem(_ => Console.WriteLine("ThreadPool方式"));

        Console.ReadLine(); // 防止主线程退出
    }
}

综上,选择 Task.Run 是最推荐的方式(简洁且高效),除非有特殊需求(如线程优先级)。

到此这篇关于C#线程启动的几种实现方法小结的文章就介绍到这了,更多相关C# 线程启动内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • C#生成随机数功能示例

    C#生成随机数功能示例

    这篇文章主要介绍了C#生成随机数功能,涉及C#数学运算与字符串操作相关技巧,具有一定参考借鉴价值,需要的朋友可以参考下
    2017-01-01
  • C#模拟http 发送post或get请求的简单实例

    C#模拟http 发送post或get请求的简单实例

    下面小编就为大家带来一篇C#模拟http 发送post或get请求的简单实例。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2016-06-06
  • asp.net(c#)编程实现将彩色图片变灰阶图片的方法示例

    asp.net(c#)编程实现将彩色图片变灰阶图片的方法示例

    这篇文章主要介绍了asp.net(c#)编程实现将彩色图片变灰阶图片的方法,结合实例形式分析了C#图片读取及属性操作相关技巧,需要的朋友可以参考下
    2017-07-07
  • C#5.0中的异步编程关键字async和await

    C#5.0中的异步编程关键字async和await

    这篇文章介绍了C#5.0中的异步编程关键字async和await,文中通过示例代码介绍的非常详细。对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-06-06
  • C#如何使用PaddleOCR进行图片文字识别功能

    C#如何使用PaddleOCR进行图片文字识别功能

    PaddlePaddle(飞桨)是百度开发的深度学习平台,旨在为开发者提供全面、灵活的工具集,用于构建、训练和部署各种深度学习模型,它具有开放源代码、高度灵活性、可扩展性和分布式训练等特点,这篇文章主要介绍了C#使用PaddleOCR进行图片文字识别,需要的朋友可以参考下
    2024-04-04
  • C#借助Spire.Doc实现Word表格自动排版

    C#借助Spire.Doc实现Word表格自动排版

    在日常开发中,利用C#自动化生成Word报告是一项常见需求,本文将介绍使用 Spire.Doc for .NET 组件,通过C#代码精确设置 C# Word 表格列宽,希望对大家有所帮助
    2026-02-02
  • C#实现向指定文本文件添加内容的方法

    C#实现向指定文本文件添加内容的方法

    这篇文章主要介绍了C#实现向指定文本文件添加内容的方法,涉及C#操作文本文件的相关技巧,具有一定参考借鉴价值,需要的朋友可以参考下
    2015-04-04
  • 在.NET WebService中跨域CORS问题的解决方案

    在.NET WebService中跨域CORS问题的解决方案

    在现代的Web应用程序开发中,跨域资源共享(Cross-Origin Resource Sharing, CORS)问题是开发者经常遇到的一个挑战,在这篇博客中,我们将深入探讨如何在 .NET WebService 中解决CORS问题,帮助开发者顺利实现跨域请求,需要的朋友可以参考下
    2024-05-05
  • C#基于委托实现多线程之间操作的方法

    C#基于委托实现多线程之间操作的方法

    这篇文章主要介绍了C#基于委托实现多线程之间操作的方法,实例分析了C#的委托机制与多线程交互操作的相关技巧,具有一定参考借鉴价值,需要的朋友可以参考下
    2015-11-11
  • C#实现冻结Excel窗口以锁定行列或解除冻结

    C#实现冻结Excel窗口以锁定行列或解除冻结

    在处理大型Excel工作簿时,有时候我们需要在工作表中冻结窗格,这样可以在滚动查看数据的同时保持某些行或列固定不动,下面我们就来看看如何使用C#实现冻结Excel窗口吧
    2024-04-04

最新评论