首页 新闻 会员 周边

在.net 中 事件 的回调函数是在哪个线程中执行的,是否可以控制

0
悬赏园豆:10 [待解决问题]

在.net中发现mqtt订阅topic事件或者redis 订阅channel事件 ,发现每次回调函数的线程id都是可能不一样的.如何确定在哪个线程中执行.

问题和这个类似,有点不明白这句:So your OnData event handler is getting called on whatever thread the ExternalSource is running on.
https://stackoverflow.com/questions/2459634/in-net-what-thread-will-events-be-handled-in

narojay的主页 narojay | 初学一级 | 园豆:3
提问于:2020-06-15 19:58
< >
分享
所有回答(1)
0

Thread.Current

花飘水流兮 | 园豆:13560 (专家六级) | 2020-06-15 20:25

我知道委托函数可能是不同,不明白的是为什么会是不同的,委托函数的由那个线程执行是看什么

支持(0) 反对(0) narojay | 园豆:3 (初学一级) | 2020-06-15 20:31

@narojay: 如event OnClick 事件

void MouseUp()

{

  if(....)Click();

}

 

protected virtual Click()

{

Task.Run(()=>{OnClick?.Invoke});
}

这样做的好处是,你的代码 执行一段时间,界面线程不会不转动;给别个留接口肯定是有这些考虑的,当然winForm并没有Task.Run()

支持(0) 反对(0) 花飘水流兮 | 园豆:13560 (专家六级) | 2020-06-15 20:36

@花飘水流兮: 可能我表达的不清楚,我实际上问的是这个Click这个方法触发的时候,所在线程是由什么决定的

支持(0) 反对(0) narojay | 园豆:3 (初学一级) | 2020-06-15 20:41

@narojay: 代码看不懂?你把Click想成通讯的事件不就完了。上图的   结构    是winForm的结构。

Task也可以换成Thread,但你觉得假设放个成员变量的Thread合适不?还是Task合适?

向下你想知道线程分配的方法,见操作系统,概括起来无非操作系统 创建返回线程实例,而线程带参数就是一个函数委托。

中间可能被进一步封装,如Task。

支持(0) 反对(0) 花飘水流兮 | 园豆:13560 (专家六级) | 2020-06-15 21:43
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册