type
Post
status
Published
date
Sep 5, 2023
slug
c-sharp-async-thread-props
summary
C#异步编程-05 向线程传递数据 异常处理
tags
C#
CS
category
学习记录
icon
password
Property
Aug 9, 2024 11:58 AM
向线程传递数据
如果你想往线程的启动方法里传递参数,最简单的方式是使用lambda表达式,在里面使用参数调用方法。(例子lambda)
甚至可以把整个逻辑都放在lambda里面.(例子multi-lambda)
传递数据C#3.0之前
在C#3.0之前,没有lambda表达式,可以使用Thread的Start方法来传递参数
Thread的重载构造函数可以接受下列两个委托之一作为参数

Lambda表达式与被捕获的变量
使用Lambda表达式可以很简单的给Thread传递参数。但是线程开始后,可能会不小心修改了被捕获的变量,这要多加注意。
i 在循环的整个生命周期指向的是同一个内存地址,每个线程对 Console.WriteLine的调用都会在它运行的时候进行修改。解决方案(captured-solution)
临时变量还是可能有问题
异常处理
创建线程是在作用范围内的try/catch/finally块,在线程开始执行后就与线程无关了
就是不会捕获线程里面的异常
在WPF、WinForm里,可以订阅全局异常处理事件
Application.DispatcherUnhandleException
Application.ThreadException
在通过消息循环调用的程序的任何部分发生未处理的异常(这相当于应用程序出于活动状态时在主线程上运行的所有代码)后,将触发这些异常
任何线程有任何未处理的异常都会触发
Application.CurrentDomain.UnhandleException
补救方法是吧异常放在Go方法里(remedy-exception)
- 作者:Kitety
- 链接:https://www.kitety.com/article/c-sharp-async-thread-props
- 声明:本文采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处。
相关文章

.png?table=block&id=16a1a2b2-0918-44c9-8ad0-84356c93e9a3&t=16a1a2b2-0918-44c9-8ad0-84356c93e9a3&width=1080&cache=v2)

.png?table=block&id=fa81f9ab-c0da-4f4e-a935-0567380c36d0&t=fa81f9ab-c0da-4f4e-a935-0567380c36d0&width=1080&cache=v2)
.png?table=block&id=55df38cd-a361-41ee-a75d-c17615e78d6b&t=55df38cd-a361-41ee-a75d-c17615e78d6b&width=1080&cache=v2)
_(1).jpg?table=block&id=a716c7ee-7105-4a3f-8133-a15129086419&t=a716c7ee-7105-4a3f-8133-a15129086419&width=1080&cache=v2)
.jpg?table=block&id=2e9784d9-1d6e-44fc-9106-f0c576ddcb8f&t=2e9784d9-1d6e-44fc-9106-f0c576ddcb8f&width=1080&cache=v2)

.png?table=block&id=c0772cdb-ee08-49f4-b2f3-c804586bb769&t=c0772cdb-ee08-49f4-b2f3-c804586bb769&width=1080&cache=v2)

.png?table=block&id=b43ea4ae-a57d-4962-80ba-12280979702b&t=b43ea4ae-a57d-4962-80ba-12280979702b&width=1080&cache=v2)
