# 多线程

6 篇文章

C# 语言

C# 多线程(四):异步调用容易踩的坑

for 循环里 Task.Run 捕获循环变量,打印出来的全是错的;原因是闭包捕获的是变量本身而不是值。顺带补上另外几个常见的坑:界面线程上 .Result 死锁、async void 吞异常、忘记 await。

2023 年 11 月 27 日 · 1 分钟读完
C# 语言

C# 多线程(二):Thread

Thread 的前台与后台、启动、线程状态、Join 等待,以及为什么不该再用 Abort:.NET 5 以后它直接抛异常。改用 CancellationToken 或标志位让线程自己退出。

2023 年 7 月 31 日 · 2 分钟读完
C# 语言

C# 多线程(三):Thread 和 Task 怎么选

从创建管理、异步编程、返回值、异常、线程复用五个方面比较 Thread 和 Task,最后给一张上位机开发里的选型表。

2023 年 7 月 31 日 · 2 分钟读完
C# 语言

C# 多线程(一):Task

Task 的五种用法:后台执行、await 等待、WhenAll 并行、异常处理、CancellationToken 取消。顺带纠正原文里 new Task 包 async 方法导致 WhenAll 等不到的真正原因。

2023 年 7 月 26 日 · 2 分钟读完
WinForm

WinForm 加载界面卡死:UI 线程被堵住了

在 Main 里先 Show 一个加载窗体再做初始化,进度条和文字都不动。原因是消息循环还没跑起来。解决办法是让加载窗体在自己的线程里 Application.Run;同类问题「Show 之后窗体显示不全」也一并说清楚。

2022 年 8 月 22 日 · 2 分钟读完
WinForm

WinForm 窗体句柄什么时候创建,事件按什么顺序

new 一个窗体并不会创建窗口句柄,Show 或 Application.Run 时才会;这就是对刚 new 出来的窗体调用 Invoke 会报错的原因。附窗体显示和关闭的完整事件顺序。

2022 年 4 月 5 日 · 2 分钟读完