为Windows应用创建简单的异步调用模式
2007-09-01 21:35:00 来源:WEB开发网本文示例源代码或素材下载
简介
最近我编写了很多智能客户端应用,总结了一些能够使应用程序在后台调用Web Service时不冻结前台界面的异步调用方法。虽然当前.NET Framework本身已经提供了异步调用的机制,但我发现在Windows应用中这一机制比较难于把握,因为这时你需要正确的控制用户界面线程处理。
在这篇文章中,我将教给您一种在Windows应用程序中实现异步调用Web服务的简单方法,通过这一方法,您不用再考虑后台线程与前台界面线程的交互关系了。
服务代理
Visual Studio® .NET会生成较好的Web服务代理类,通过它可以异步的使用Web服务,但是这个代理类实现的是.NET Framework本身的异步调用机制,如上所述,这一机制对于Windows应用来说并不十分方便。由于这个原因,我一般不直接使用生成的代理类,而是在中间增加服务代理类。
服务代理类就是增加了额外功能的类,这些功能可以帮助客户端程序与Web服务进行交互。服务代理类实现了许多有用的功能,包括数据缓存,安全身份管理,离线操作支持等等。本文中创建的服务代理类比.NET Framework本身的普通代理类实现了更简便的异步调用模式。
用户界面线程
应用程序从一个创建和管理用户界面的线程起始,这一线程被称为用户界面线程。大多数开发者本能的会使用用户界面线程完成所有的工作,包括进行Web服务调用,远程对象调用,访问数据库等等,大多数使用和性能方面的问题是由这一不恰当的方法引起的。
问题的本质是你永远不可能精确的预知访问Web服务,远程对象,或者数据库所需的时间。而且当你在用户界面线程中进行这类的调用时,用户界面就有可能会产生令人恼怒的冻结。
自然而然的,你会把这一类的调用放置在一个单独的线程中,但我更进了一步,建议您把所有的非用户界面工作坊制在一个分离的线程中。我的观点是,用户界面线程只用来管理用户界面,而所有那些你不能保证良好响应时间的对象调用都应该是异步的,无论是进程内的,跨进程的,还是跨计算机的。
更多精彩
赞助商链接