利用辅助线程更新用户界面UI----外文资料翻译.docVIP

利用辅助线程更新用户界面UI----外文资料翻译.doc

  1. 1、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
淮 海 工 学 院 毕业设计(论文)外文资料翻译 系 (院): 计算机科学与技术系 专 业: 计算机科学与技术专业 姓 名: 黄 源 学 号: 111001213 外文出处: MSDN期刊 附 件: 1.外文资料翻译译文;2.外文原文。 指导教师评语: 签名: (亲笔签名) 年 月 日 注:请将该封面与附件装订成册。 附件1:外文资料翻译译文 利用辅助线程更新用户界面UI 原著:Ted Pattison 原文出处:MSDN Magazine May 2004 (Basic Instincts)  在我 2004年1月 的专栏里,我讨论了如何利用委托(Delegate)实现异步执行一个方法。当时,我展示了如何在一个 Windows Form 应用内部通过调用一个委托对象的 BeginInvoke()方法来实现一个异步的方法调用。你也许还记得我是如何设置一个回调(Callback)方法,并让上述的异步方法在执行完毕后自动地触发这个回调方法。但现在我要停下来说一说如何更新UI(User Interface,用户界面),让用户知道这个工作已经完成。   在Windows Form的辅助线程中更新UI的元素是一项需要点技巧的工作。因为辅助线程被禁止读写窗体或者窗体控件中的数据属性(Property)。做出这样的限制是因为窗体中的form对象与control对象并非是线程安全的(译注:指不能保证任一时刻仅有一个线程在访问该对象)。只有主线程能直接访问form的或者form中control的数据属性。因此你必须学会在遵守这个规则的前提下更新UI。   在这里,你将学会如何编写代码实现程序的控制权从正在执行的辅助线程向主线程的切换——使用一种称为“引导”的方法(Marshal,译注:不要把它与.NET中的封送过程混淆,作者只是使用了相同的单词)。通过它,你可以安全可靠地实现UI的更新。一旦从辅助线程切换到主线程中来,你就可以自由改变form的或者form中control的数据属性了。 使用委托进行异步执行   首先来看看名为Form1的这个Windows Form应用的代码(参见 Figure 1)。这段代码演示了如何异步地执行一个方法。这里的技巧在于将一个目标方法(GetCustomerList())绑定到了一个委托对象上,然后通过调用这个委托对象的BeginInvoke()方法开始该目标方法的异步执行。   这里使用的技巧也展示了如何将一个回调方法(比如MyCallbackMethod())绑定到第二个委托对象上,然后将该委托对象的一个引用(Reference)作为BeginInvoke()方法的第二个参数传递给它。 TargetHandler.BeginInvoke(CA, CallbackHandler, Nothing)   使用回调方法最主要的优点在于可以避免不断地轮询该异步方法是否已经执行完毕。当辅助线程完成了GetCustomerList()方法的执行后,它会在返回至由CLR (Common Language Runtime,公共语言运行库)管理的辅助线程池之前紧接着执行MyCallbackMethod()。   一定要切记:MyCallbackMethod()这样的回调方法是在辅助线程中执行的,而不是在主线程中。这意味着你永远不要企图在类似的回调方法中去实现UI的更新!你所要做的,恰恰是编写代码以实现程序的执行流程从回调方法所在的辅助线程切换回主线程。我会通过一个完整的实例一步步地教会你。 切换至 UI 线程   我先添加了一个新的自定义方法 UpdateUI()。这个方法在回调方法需要更新UI时被调用。UpdateUI()的原型是特定于该应用的,不具有普遍性(译注:指UpdateUI()的名称、参数表可以自由设置,下文亦有说明)。 *** 当需要更新UI时被调用 Sub UpdateUI(StatusMessage As String, Customers As String()) *** 这个方法将把控制权切换回主UI线程 End Sub   UpdateUI()方法有两个参数,一个是string类型的StatusMessage,用来传递将要向用户显示的提示字符串;另一个

文档评论(0)

嫣雨流纱 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档