2013-03-27 83 views
0

我想使用我的web服务,但我似乎无法调用多个异步函数...除了级联从一个AsyncCompleted开始另一个??如何从.NET Winforms对ASP.Net webservice执行多个异步调用?

进口picklists.MyWebService

公共类主要

Dim WithEvents ws As New picklists.MyWebService.picklists 

Private Sub main_Load(sender As Object, e As EventArgs) Handles MyBase.Load 

    ws.GetCustomersAsDatatableAsync() 
    ws.GetRoutesAsDatatableAsync() 

End Sub 

Private Sub ws_GetCustomersAsDatatableCompleted(sender As Object, e As GetCustomersAsDatatableCompletedEventArgs) Handles ws.GetCustomersAsDatatableCompleted 

    Dim dt As DataTable = CType(e.Result, DataTable) 

    cmb_customer.DataSource = dt 
    cmb_customer.DisplayMember = "NAME" 

End Sub 

Private Sub ws_GetRoutesAsDatatableCompleted(sender As Object, e As GetRoutesAsDatatableCompletedEventArgs) Handles ws.GetRoutesAsDatatableCompleted 

    Dim dt As DataTable = CType(e.Result, DataTable) 

    cmb_route.DataSource = dt 
    cmb_route.DisplayMember = "NAME" 

End Sub 

的InnerException: {“有异步处理过程中出现错误,需要唯一的状态对象多个异步同时操作是杰出的。 “}

EDIT/SOLUTION

Imports picklists.MyWebService 

Public Class main 

    Dim WithEvents ws As New picklists.MyWebService.picklists 

    Private Sub main_Load(sender As Object, e As EventArgs) Handles MyBase.Load 

     ws.GetCustomersAsDatatableAsync(Guid.NewGuid.ToString) 
     ws.GetRoutesAsDatatableAsync(Guid.NewGuid.ToString) 

    End Sub 

    Private Sub ws_GetCustomersAsDatatableCompleted(sender As Object, e As GetCustomersAsDatatableCompletedEventArgs) Handles ws.GetCustomersAsDatatableCompleted 

     Dim g As String = e.UserState 

     Dim dt As DataTable = CType(e.Result, DataTable) 

     cmb_customer.DataSource = dt 
     cmb_customer.DisplayMember = "NAME" 

    End Sub 

    Private Sub ws_GetRoutesAsDatatableCompleted(sender As Object, e As GetRoutesAsDatatableCompletedEventArgs) Handles ws.GetRoutesAsDatatableCompleted 

     Dim g As String = e.UserState 

     Dim dt As DataTable = CType(e.Result, DataTable) 

     cmb_route.DataSource = dt 
     cmb_route.DisplayMember = "NAME" 

    End Sub 
+1

到目前为止你做了什么?告诉我们你的代码。你究竟能实施什么? – 2013-03-27 11:03:34

+0

请参阅上面的更新。 – grmbl 2013-03-27 11:46:26

回答

2

Here是一些很好的c#示例这个问题的文章。它说,你应该传递一个独特的状态对象到异步方法。

ws.GetCustomersAsDatatableAsync(System.Guid.NewGuid()) 
ws.GetRoutesAsDatatableAsync(System.Guid.NewGuid()) 
+0

谢谢德米特里,但我不完全理解如何在我的解决方案中实现该答案。函数调用不需要参数,我应该如何传递一个GUID /状态对象? – grmbl 2013-03-27 12:32:24

+0

它的工作原理!我会用答案更新我的问题。 – grmbl 2013-03-27 12:38:27