type
status
date
slug
summary
tags
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 许可协议,转载请注明出处。
相关文章