BeginInvoke 问题 BeginInvoke 一种是基于Control的,另外一种是关于Delegate的BeginInvoke,Control.BeginInvoke 是UI线程用于同步UI界面的一种调用方法,他仍然属于UI线程, Delegate.BeginInvoke又是怎么样的实现原理呢?他和单开一个线程然后来实现函数调用有什么区别呢?请教 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 http://www.cnblogs.com/peterzb/archive/2009/06/10/1500273.html这个博客应该对你有用。 BeginInvoke要区分两种情况,一种是.net已经定义的某些IO操作类的BeginInvoke,比如socket\http\IO读写的以begin打头的方法或者sync结尾的方法,这些都是基于iocp的。一种是自定义delegate的BeginInvoke方法,这些实际是封装了处理器线程池。 Invoke就是直接运行,BeginInvoke是开启另一个辅助线程运行。delegate是定义委托类型的,相当于老版本函数指针类型,它的意义比虚函数更广泛。 begininvoke是delegate这个class提供的函数。你说的control的begininvoke不过是对基类这个方法的重用罢了,其本质也还是delegate的函数。begininvoke的原理则是实现了线程池的queryuserworkitem方法,其本质无非就是线程池的其它线程的调用。begininvoke和endinvoke是.net为了实现异步的使用,而针对异步采取的一种编程范式,你可以看成是语法糖,其实无非就是异步编程的一种实现方式,如此而已。 control的begininvoke不过是对基类这个方法的重用罢了,其本质也还是delegate的函数, 既然如此他们应该属于另外一个线程,可是在调用的时候发现Control的BeginInvoke的执行体也是在ui线程中,这个该怎么理解啊 control的begininvoke的实现原理似乎与delegate不是一样的,前者一般用于对ui线程的操作,并没有开启新的线程,而是在线程中间传递了消息,实现了其之间的数据的同步 总结一下BeginEnd模型至少有三种情况1.Control.BeginInvoke 是用消息机制通知创建控件的UI线程2.比如socket\http\IO读写的以begin打头的方法或者sync结尾的方法,这些都是基于iocp的。3.单纯的delegate.BeginInvoke 是将任务托管给线程池 C#下怎样操作berkeley db 的游标,急!!! c# 收发短信 删除xml中指定节点中的子节点 复制文件时如何在新线程中显示进度条的进度 刚刚下了VS.net 2005共用时40分52秒,哇哈哈哈 c#下如何写这个正则表达式 C#中怎么通过DATAgrid来操作数据的怎么才能取得当前我选中的这一行的编号 如何延长网页执行时间? 长角了,散分... 谁知道在asp.net中怎么把一个文件保存到数据库中?? 如何做用户登录界面? Invoke提示"索引超出了数组界限"
一种是自定义delegate的BeginInvoke方法,这些实际是封装了处理器线程池。
delegate是定义委托类型的,相当于老版本函数指针类型,它的意义比虚函数更广泛。
你说的control的begininvoke不过是对基类这个方法的重用罢了,其本质也还是delegate的函数。begininvoke的原理则是实现了线程池的queryuserworkitem方法,其本质无非就是线程池的其它线程的调用。begininvoke和endinvoke是.net为了实现异步的使用,而针对异步采取的一种编程范式,你可以看成是语法糖,其实无非就是异步编程的一种实现方式,如此而已。
control的begininvoke不过是对基类这个方法的重用罢了,其本质也还是delegate的函数, 既然如此他们应该属于另外一个线程,可是在调用的时候发现Control的BeginInvoke的执行体也是在ui线程中,这个该怎么理解啊
control的begininvoke的实现原理似乎与delegate不是一样的,前者一般用于对ui线程的操作,并没有开启新的线程,而是在线程中间传递了消息,实现了其之间的数据的同步
1.Control.BeginInvoke 是用消息机制通知创建控件的UI线程
2.比如socket\http\IO读写的以begin打头的方法或者sync结尾的方法,这些都是基于iocp的。
3.单纯的delegate.BeginInvoke 是将任务托管给线程池