BeginInvoke 问题

jerry_zhang99 2011-03-02 03:45:35
BeginInvoke 一种是基于Control的,另外一种是关于Delegate的BeginInvoke,Control.BeginInvoke 是UI线程用于同步UI界面的一种调用方法,他仍然属于UI线程, Delegate.BeginInvoke又是怎么样的实现原理呢?他和单开一个线程然后来实现函数调用有什么区别呢?

请教
...全文
230 9 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
meiwlong 2012-07-05
  • 打赏
  • 举报
回复
总结一下BeginEnd模型至少有三种情况
1.Control.BeginInvoke 是用消息机制通知创建控件的UI线程
2.比如socket\http\IO读写的以begin打头的方法或者sync结尾的方法,这些都是基于iocp的。
3.单纯的delegate.BeginInvoke 是将任务托管给线程池
jerry_zhang99 2011-03-03
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 xiao_p 的回复:]

begininvoke是delegate这个class提供的函数。
你说的control的begininvoke不过是对基类这个方法的重用罢了,其本质也还是delegate的函数。

[/Quote]

control的begininvoke的实现原理似乎与delegate不是一样的,前者一般用于对ui线程的操作,并没有开启新的线程,而是在线程中间传递了消息,实现了其之间的数据的同步
flyerwing 2011-03-03
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 wuyq11 的回复:]
Invoke就是直接运行,BeginInvoke是开启另一个辅助线程运行。
delegate是定义委托类型的,相当于老版本函数指针类型,它的意义比虚函数更广泛。
[/Quote]
异步调用吧.
jerry_zhang99 2011-03-03
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 xiao_p 的回复:]

begininvoke是delegate这个class提供的函数。
你说的control的begininvoke不过是对基类这个方法的重用罢了,其本质也还是delegate的函数。

begininvoke的原理则是实现了线程池的queryuserworkitem方法,其本质无非就是线程池的其它线程的调用。

begininvoke和endinvoke是.net为了实现异步的使用,而针……
[/Quote]

control的begininvoke不过是对基类这个方法的重用罢了,其本质也还是delegate的函数, 既然如此他们应该属于另外一个线程,可是在调用的时候发现Control的BeginInvoke的执行体也是在ui线程中,这个该怎么理解啊
xiao_p 2011-03-02
  • 打赏
  • 举报
回复
begininvoke是delegate这个class提供的函数。
你说的control的begininvoke不过是对基类这个方法的重用罢了,其本质也还是delegate的函数。

begininvoke的原理则是实现了线程池的queryuserworkitem方法,其本质无非就是线程池的其它线程的调用。

begininvoke和endinvoke是.net为了实现异步的使用,而针对异步采取的一种编程范式,你可以看成是语法糖,其实无非就是异步编程的一种实现方式,如此而已。

wuyq11 2011-03-02
  • 打赏
  • 举报
回复
Invoke就是直接运行,BeginInvoke是开启另一个辅助线程运行。
delegate是定义委托类型的,相当于老版本函数指针类型,它的意义比虚函数更广泛。

lizhibin11 2011-03-02
  • 打赏
  • 举报
回复
BeginInvoke要区分两种情况,一种是.net已经定义的某些IO操作类的BeginInvoke,比如socket\http\IO读写的以begin打头的方法或者sync结尾的方法,这些都是基于iocp的。
一种是自定义delegate的BeginInvoke方法,这些实际是封装了处理器线程池。
garfieldzf 2011-03-02
  • 打赏
  • 举报
回复

111,094

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • AIGC Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧