更新:2007 年 11 月
Web 服务代理类中的每个 Web 方法都具有一个异步的对应版本。代理类自动生成每个 Web 方法的异步方法和对应事件。当异步方法被调用时,它将在另一个线程上执行,并在返回时引发对应的事件。您可以为异步方法的对应事件创建一个处理程序,从而在它返回时执行代码。
使用 Visual Basic 异步调用 Web 方法
- 使用 WithEvents 关键字声明 Web 服务代理类的一个实例,如下所示: - Dim WithEvents myWebService As New Service1.gif) 说明: 说明:- 您的项目必须包含对该 Web 服务的 Web 引用。 
- 在代码编辑器中,使用 Handles 关键字为对应于您想要调用的方法的 MethodCompleted 事件创建事件处理程序。例如,如果要异步调用一个名为 HelloWorld 的方法,您可创建类似如下的方法: - Private Sub HelloWorldComplete(ByVal sender As Object, _ ByVal completed As localhost.HellowWorldCompletedEventArgs) _ Handles myWebService.HelloWorldCompleted ' Insert code to implement the method here End Sub- 注意处理 MethodCompleted 事件的方法必须匹配该事件的签名。这通常需要一个表示发送方的 Object 参数和该方法的 EventArgs 的一个实例,后者驻留在与 Web 服务代理类相同的命名空间中。还可以使用代码编辑器来为您自动创建事件处理程序。有关更多信息,请参见 如何:在 Visual Basic 代码编辑器中创建事件处理程序。 
- 使用该方法的 MethodAsync 形式调用 Web 方法。例如,如果要异步调用一个名为 HelloWorld 的 Web 方法,它将类似如下: - HelloWorldAsync- 注意该方法的返回值在 EventArgs 的 Result 属性中可用。 
使用 C# 异步调用 Web 方法
- 声明 Web 服务代理类的一个实例,如下所示: - private localhost.Service1 myWebService = new localhost.Service1 ();.gif) 说明: 说明:- 您的项目必须包含对该 Web 服务的 Web 引用。 
- 在代码编辑器中,为对应于您想要调用的方法的 MethodCompleted 事件添加事件处理程序。例如,如果要异步调用一个名为 HelloWorld 的方法,您可创建类似如下的方法: - private void HelloWorldCompleted(Object sender, localhost.HelloWorldCompletedEventArgs Completed) { // Insert code to implement the method here }- 注意处理 MethodCompleted 事件的方法必须匹配该事件的签名。这通常需要一个表示发送方的 Object 参数和该方法的 EventArgs 的一个实例,后者驻留在与 Web 服务代理类相同的命名空间中。还可以使用代码编辑器来为您自动创建事件处理程序。有关更多信息,请参见如何:订阅和取消订阅事件(C# 编程指南)。 
- 在该类的构造函数中,向该事件的处理程序列表添加 MethodCompleted 事件处理程序,如下所示: - private void Form1_Load(object sender, EventArgs e) { myWebService.HelloWorldCompleted += new localhost.HelloWorldCompletedEventHandler(HelloWorldCompleted); }
- 使用该方法的 MethodAsync 形式调用 Web 方法。例如,如果要异步调用一个名为 HelloWorld 的 Web 方法,它将类似如下: - HelloWorldAsync();- 注意该方法的返回值在 EventArgs 的 Result 属性中可用。