type
status
date
slug
summary
tags
category
icon
password
Property
Sep 5, 2023 12:15 PM

向线程传递数据

如果你想往线程的启动方法里传递参数,最简单的方式是使用lambda表达式,在里面使用参数调用方法。(例子lambda)
甚至可以把整个逻辑都放在lambda里面.(例子multi-lambda)

传递数据C#3.0之前

在C#3.0之前,没有lambda表达式,可以使用Thread的Start方法来传递参数
Thread的重载构造函数可以接受下列两个委托之一作为参数
notion image

Lambda表达式与被捕获的变量

使用Lambda表达式可以很简单的给Thread传递参数。但是线程开始后,可能会不小心修改了被捕获的变量,这要多加注意。
i 在循环的整个生命周期指向的是同一个内存地址,每个线程对 Console.WriteLine的调用都会在它运行的时候进行修改。解决方案(captured-solution)
临时变量还是可能有问题

异常处理

创建线程是在作用范围内的try/catch/finally块,在线程开始执行后就与线程无关了
就是不会捕获线程里面的异常
在WPF、WinForm里,可以订阅全局异常处理事件
Application.DispatcherUnhandleException
Application.ThreadException
在通过消息循环调用的程序的任何部分发生未处理的异常(这相当于应用程序出于活动状态时在主线程上运行的所有代码)后,将触发这些异常
任何线程有任何未处理的异常都会触发
Application.CurrentDomain.UnhandleException
补救方法是吧异常放在Go方法里(remedy-exception)
 
C#异步编程-04 什么是线程安全C#异步编程-06 前台线程 vs 后台线程
  • Waline
Kitety
Kitety
独特为佳
公告
我曾经七次鄙视自己的灵魂
--卡里·纪伯伦
第一次,当它本可进取时,却故作谦卑;
第二次,当它在空虚时,用爱欲来填充;
第三次,在困难和容易之间,它选择了容易;
第四次,它犯了错,却借由别人也会犯错来宽慰自己;
第五次,它自由软弱,却把它认为是生命的坚韧;
第六次,当它鄙夷一张丑恶的嘴脸时,却不知那正是自己面具中的一副;
第七次,它侧身于生活的污泥中,虽不甘心,却又畏首畏尾。
 
最新评论
Loading...