在.net 中 事件 的回调函数是在哪个线程中执行的,是否可以控制
时间: 2020-06-15来源:博客园
前景提要
在.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 .net 事件 narojay | 初学一级 | 园豆: 14
提问于:2020-06-15 19:58 显示帮助
使用"Ctrl+Enter"可进行快捷提交,评论支持部分 Markdown 语法:[link](http://example.com) _italic_ **bold** `code`。
< > 分享
分享您的问题
所有回答(1) 0 Thread.Current 花飘水流兮 | 园豆:11055 (专家六级) | 2020-06-15 20:25 我知道委托函数可能是不同,不明白的是为什么会是不同的,委托函数的由那个线程执行是看什么 支持( 0 ) 反对( 0 ) narojay | 园豆:14 (初学一级) | 2020-06-15 20:31 @narojay: 如event OnClick 事件
void MouseUp()
{
  if(....)Click();
}

protected virtual Click()
{
Task.Run(()=>{OnClick?.Invoke});
}
这样做的好处是,你的代码 执行一段时间,界面线程不会不转动;给别个留接口肯定是有这些考虑的,当然winForm并没有Task.Run() 支持( 0 ) 反对( 0 ) 花飘水流兮 | 园豆:11055 (专家六级) | 2020-06-15 20:36 @花飘水流兮: 可能我表达的不清楚,我实际上问的是这个Click这个方法触发的时候,所在线程是由什么决定的 支持( 0 ) 反对( 0 ) narojay | 园豆:14 (初学一级) | 2020-06-15 20:41 @narojay: 代码看不懂?你把Click想成通讯的事件不就完了。上图的 结构 是winForm的结构。
Task也可以换成Thread,但你觉得假设放个成员变量的Thread合适不?还是Task合适?
向下你想知道线程分配的方法,见操作系统,概括起来无非操作系统 创建返回线程实例,而线程带参数就是一个函数委托。
中间可能被进一步封装,如Task。 支持( 0 ) 反对( 0 ) 花飘水流兮 | 园豆:11055 (专家六级) | 2020-06-15 21:43 编辑文本 预览 上传图片
Ctrl+Enter键快速提交
清除回答草稿
您需要 登录 以后才能回答,未注册用户请先 注册 。

科技资讯:

科技学院:

科技百科:

科技书籍:

网站大全:

软件大全:

热门排行