2011年9月5日
摘要: 一、为什么Control类提供了Invoke和BeginInvoke机制?关于这个问题的最主要的原因已经是dotnet程序员众所周知的,我在此费点笔墨再次记录到自己的日志,以便日后提醒一下自己。1、windows程序消息机制Windows GUI程序是基于消息机制的,有个主线程维护着一个消息泵。这个消息泵让windows程序生生不息。 Windows GUI程序的消息循环Windows程序有个消息队列,窗体上的所有消息是这个队列里面消息的最主要来源。这里的while循环使用了GetMessage()这个方法,这是个阻塞方法,也就是队列为空时方法就会被阻塞,从而这个while循环停止运动,这避免 阅读全文
posted @ 2011-09-05 23:55 jason-chen 阅读(340) 评论(0) 推荐(0) 编辑
摘要: (一)Control的Invoke和BeginInvoke我们要基于以下认识:(1)Control的Invoke和 BeginInvoke与Delegate的Invoke和BeginInvoke是不同的。(2)Control的Invoke和 BeginInvoke的参数为delegate,委托的方法是在Control的线程上执行的,也就是我们平时所说的UI线程。我们以代码(一)来看(Control的Invoke)private delegate void InvokeDelegate();private void InvokeMethod(){//C 代码段}private void butI 阅读全文
posted @ 2011-09-05 23:39 jason-chen 阅读(341) 评论(0) 推荐(0) 编辑
摘要: 引言 在之前的《创建无阻塞的异步调用》中,已经介绍过异步调用的编写步骤和实施原理。异步调用是CLR为开发者提供的一种重要的编程手段,它也是构建高性能、可伸缩应用程序的关键。在多核CPU越来越普及的今天,异步编程允许使用非常少的线程执行很多操作。我们通常使用异步完成许多计算型、IO型的复杂、耗时操作,去取得我们的应用程序运行所需要的一部分数据。在取得这些数据后,我们需要将它们绑定在UI中呈现。当数据量偏大时,我们会发现窗体变成了空白面板。此时如果用鼠标点击,窗体标题将会出现”失去响应”的字样,而实际上UI线程仍在工作着,这对用户来说是一种极度糟糕的体验。如果你希望了解其中的原因(并不复杂:)). 阅读全文
posted @ 2011-09-05 23:33 jason-chen 阅读(872) 评论(0) 推荐(0) 编辑