WEB开发网
开发学院软件开发C语言 我眼中委托的真正面貌(三) 阅读

我眼中委托的真正面貌(三)

 2009-05-14 08:28:38 来源:WEB开发网   
核心提示: 对比以上的两段代码,我们不难发现其中的差别,我眼中委托的真正面貌(三)(5),与上一段代码相比,我们在这里使用了BeginInvoke()的另一个重载方法,同步亦并非一定要针对单线程的程序而言,我们不妨再以上一篇随笔中“跨线程操控控件”这段代码来说明问题,其中的一个

对比以上的两段代码,我们不难发现其中的差别,与上一段代码相比,我们在这里使用了BeginInvoke()的另一个重载方法。其中的一个参数即为BeginInvoke()方法指定的回调方法,在相应的目标方法执行完毕之后将调用该回调方法,并且可以在相应的回调用法中调用结束动作。

这里值得顺带一提的是,有关我写上一篇随笔时留下的关于Control.Invoke()方法的疑问。

大家可能会发现,本节中提到的[delegate].Invoke()方法与上节中提到的Control.Invoke()方法在名称书写上是一样的,那么他们在功能上是否存在着些许的相似之处呢?以下是我做出的总结:

Return          Work Thread

 

Control.Invoke                完成工作         强制於 UI Thread

Control.BeginInvoke            立即            强制於 UI Thread

[delegate].Invoke              完成工作         Call Invoke 的 Thread

[delegate].BeginInvoke          立即            新的背景 Thread

从中大家可以发现一个关键的问题,不论委托对象也好,Control对象也好,他们的Invoke ()方法都是以绝对同步的方式执行,而BeginInvoke()方法则是以绝对异步的方式执行。

在这里,我之所以强调“绝对” 两个字,是为了提醒读者虽然“异步”与“多线程”间存在着密切的联系,但异步并不等于在原程序的基础上开设子线程,同步亦并非一定要针对单线程的程序而言。

我们不妨再以上一篇随笔中“跨线程操控控件”这段代码来说明问题,当然为说明问题方便,我做了部分调整:

上一页  1 2 3 4 5 6 7  下一页

Tags:眼中 委托 真正

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接