简介应用程序通常需要在后台执行长时间运行的操作,同时还要提供积极的、响应及时的用户体验。这种情况在智能设备开发过程中最为常见。Pocket PC 上运行的应用程序必须能够随时执行用户所需的任务,但是,由于此类设备的 CPU 处理能力通常都有限,而且常常使用低带宽连接,因此限制了很多进程的执行速度,对较为复杂的应用程序更是如此。通常情况下,要处理长时间运行的任务,最好是在后台进行长时间处理,同时使用户可以与应用程序进行交互。 执行后台处理牵涉到很多方面,要求非常仔细地进行设计。下面提供了一些有关充分利用后台处理的建议,并提出了很多必须解决的问题。 后台处理的类型.NET Framework 精简版提供了三种基本技术,支持将长时间运行的处理移到后台进行。异步 XML Web Service、线程池和显式创建的线程这三种技术分别适用于不同的情况,需要正确地应用和管理。 异步 XML Web ServiceWeb 服务为智能设备与中央服务之间的通信提供了一种易于使用的机制。通常情况下,Web 服务必须传输大量数据,而且必须通过低速移动连接来实现传输。此类长时间运行的数据传输最适合利用 .NET Framework 精简版的功能来异步管理 Web 服务调用。 通常情况下,Web 服务是通过 Visual Studio .NET 的“Add Web Reference”(添加 Web 引用)或 WSDL 命令行实用程序生成的代理类调用的。利用此技术,应用程序开发人员可以对代理类调用本地方法,控制实际调用远程 Web 服务所需的 XML 的生成、传输和分析等方面的细节。生成的代理类为每个 Web 服务操作提供三个方法。其中一个方法的名称与异步调用 Web 服务的 Web 服务操作相同,另外两个方法的前缀分别为“Begin”和“End”,用于异步调用 Web 服务。例如,执行 Add(添加)操作的 Web 服务代理包含名为 Add、BeginAdd 和 EndAdd 的方法。 注意:有关使用 Visual Studio .NET 的“Add Web Reference”(添加 Web 引用)功能的详细信息,请参阅 Adding and Removing Web References(英文)。有关 WSDL 命令行实用程序的详细信息,请参阅 Web Services Description Language Tool(英文)。 进行异步 Web 服务调用异步启动 Web 服务与调用该操作的“Begin”方法一样简单。假设 Web 服务 Add(添加)操作需要两个整数参数。以下代码将异步调用 Web 服务。 MathProxy wsMath = new MathProxy();wsMath.BeginAdd(10, 15, null, null); 调用 BeginAdd 并不会直接调用 Web 服务,而是对实际的 Web 服务调用进行排队,然后立即返回。调用返回时,Web 服务本身不提供任何信息,而是返回一个 IAsyncResult 引用,用于检索实际 Web 服务调用的结果。
class MyCalcForm : Form { private IAsyncResult _addAsyncResult ; private MathProxy _wsMath = new MathProxy() ; public void btnAdd_OnClick(object sender, EventArgs e) { _addAsyncResult = _wsMath.BeginAdd(10, 15, null, null) ; }
|
|
|
|
|
|