为Windows应用创建简单的异步调用模式
2007-09-01 21:35:00 来源:WEB开发网无论如何,尽量使用户界面线程处理的异步调用模式简单化,我已经实现了一个与Visual Studio 2005里某个特性类似的简单异步调用模式。作为开始,我们首先解释一下当前.NET Framework中异步调用模式的工作原理。
.NET异步调用模式
系统生成的Web服务代理类的每个Web函数都有一个Begin和一个End方法,每个支持.NET Framework异步调用模式的对象都和这个类似。开始进行异步调用时,客户端调用Begin方法时就立即响应,或者在建立了访问Web服务的独立线程后马上响应。在这之后的某个时间,当Web服务访问完成后,客户端再调用End方法。
但客户端如何知道什么时候调用End方法呢?Begin方法会返回一个IAsyncResult对象,可以帮助你跟踪异步调用的过程,也可以明确的等待后台线程完成,但如果在用户界面线程中进行这些工作,会降低整个系统的同步性。更好的方法是,在用户界面进程中注册一个回调函数,当其它工作完成时产生一个自动通知。
让我们看一段样例代码,在这段代码中,我们从一个Web服务中获取一些客户数据,这些功能通过Web服务代理类里的GetCustomerData方法完成。我们可以启动这个Web服务调用,并且用以下代码注册一个回调函数,用来在用户界面线程中产生与应用程序进行交互的功能。
private void SomeUIEvent( object sender, EventArgs e )
{
// Create a callback delegate so we will
// be notified when the call has completed.
AsyncCallback callBack = new
AsyncCallback( CustomerDataCallback );
// Start retrieving the customer data.
_proxy.BeginGetCustomerData( "Joe Bloggs", callBack, null );
}
Web服务调用最终返回CustomerDataCallback方法,在这个方法中,我们需要调用真正用于获取客户数据的Web服务代理类中的End方法,这个方法可以实现如下:
更多精彩
赞助商链接