21人参与 • 2025-07-04 • Asp.net
在 c# 中,单独开一个线程运行一段代码(如执行一句话)有多种方式,具体取决于使用的 .net 版本和需求。以下是几种常见方法:
适用于所有 .net 版本,但较底层。
using system.threading; // 定义一个方法,包含要执行的代码 void dowork() { console.writeline("这句话在新线程中运行!"); } // 创建并启动线程 thread thread = new thread(dowork); thread.start(); // 启动线程 // 可选:设置为后台线程(程序退出时自动结束) thread.isbackground = true;
更现代的方式,基于线程池,适合异步操作。
using system.threading.tasks; task.run(() => { console.writeline("这句话在task线程池中运行!"); }); // 或者异步方法 async task executeasync() { await task.run(() => console.writeline("异步线程执行!")); } await executeasync();
优点
async/await
异步编程。适合短期任务,避免手动创建线程。
using system.threading; threadpool.queueuserworkitem(_ => { console.writeline("这句话在线程池中运行!"); }); // 或者带参数 threadpool.queueuserworkitem(state => { console.writeline($"参数: {state}"); }, "hello");
适用场景
适合需要在 ui 线程中更新界面的场景。
using system.componentmodel; var worker = new backgroundworker(); worker.dowork += (sender, e) => { console.writeline("这句话在backgroundworker中运行!"); }; worker.runworkerasync(); // 启动
如果只是简单并行执行代码块:
parallel.invoke(() => { console.writeline("这句话在并行任务中运行!"); });
方法 | 适用场景 | 备注 |
---|---|---|
thread | 需要精确控制线程(如优先级、前台/后台) | 底层,不推荐频繁使用 |
task | 现代异步编程(推荐) | 默认用线程池,支持 async/await |
threadpool | 短期任务 | 避免阻塞线程池 |
backgroundworker | winforms/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# 线程启动内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!
您想发表意见!!点此发布评论
版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。
发表评论