当前位置: 代码网 > it编程>编程语言>Asp.net > C#线程启动的几种实现方法小结

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

2025年07月04日 Asp.net 我要评论
在 c# 中,单独开一个线程运行一段代码(如执行一句话)有多种方式,具体取决于使用的 .net 版本和需求。以下是几种常见方法:方法 1:使用thread类(传统方式)适用于所有 .net 版本,但较

在 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# 线程启动内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com