C# 应用程序中对webservice方法的多个异步调用失败,出现异常

C# 应用程序中对webservice方法的多个异步调用失败,出现异常,c#,wpf,winforms,web-services,wcf,C#,Wpf,Winforms,Web Services,Wcf,我正在尝试创建一个连接到internet的应用程序,并为它的每个操作使用web服务。就我而言,我希望使用异步方法,我已经在使用该方法来获取联系人集合。我意识到,当我对组执行相同操作时(意味着使组异步)我在通话中有错误,但在使用普通通话时没有。因此我在网上做了一些研究,发现很多人都有相同的问题。 他们中的一些人被要求使用WCF(我不认识杰克)。我想知道是否有其他方法可以克服这个问题。如果没有,有人能告诉我可靠的在线资源并帮助我度过难关吗?谢谢你的阅读和帮助 这是我的密码: public part

我正在尝试创建一个连接到internet的应用程序,并为它的每个操作使用
web服务
。就我而言,我希望使用
异步方法
,我已经在使用该方法来获取联系人集合。我意识到,当我对组执行相同操作时(意味着使组异步)我在通话中有错误,但在使用普通通话时没有。因此我在网上做了一些研究,发现很多人都有相同的问题。
他们中的一些人被要求使用
WCF
(我不认识杰克)。我想知道是否有其他方法可以克服这个问题。如果没有,有人能告诉我可靠的在线资源并帮助我度过难关吗?谢谢你的阅读和帮助 这是我的密码:

 public partial class main : Window
{
    //...
    private static vmcSession session;
    private MyService service = new MyService();
    private contactInfo[] loadedcontact;
    //....

    public main()
    {
        InitializeComponent();
        //service.addContactCompleted +=new addContactCompletedEventHandler(addContactCompleted);
        service.getContactsCompleted += new getContactsCompletedEventHandler(getContactsCompleted);
        service.getGroupsCompleted += new getGroupsCompletedEventHandler(getGroupsCompleted);
        fillContents();
    }

    private void getGroupsCompleted(object sender, getGroupsCompletedEventArgs e)
    {
        try
        {
            groupListBox.ItemsSource = e.Result;
        }
        catch (Exception ex)
        {
            MessageBox.Show(ex.InnerException.Message);
        }
    }

    private void getContactsCompleted(object sender, getContactsCompletedEventArgs e)
    {
        try
        {
            loadedcontact = e.Result;
            contactListBox.ItemsSource = loadedcontact;
        }
        catch (Exception ex)
        {
            MessageBox.Show(ex.Message);
        }
    }

    private void addContactCompleted(object sender, addContactCompletedEventArgs e)
    {
        throw new NotImplementedException();
    }

    public void fillContents()
    {
        displayUserInformation();
        loadContacts();
        service.getGroupsAsync(session.key, null);
        //groupListBox.ItemsSource = service.getGroups(session.key, null);
        cmbSenderIds.ItemsSource = service.getSenderIds(session.key, null);
        if (cmbSenderIds.Items.Count > 0)
        {
            cmbSenderIds.SelectedIndex = 0;
        }
        loadGrid();


    }


    public void loadContacts()
    {
        service.getContactsAsync(session.key, null);
    }



    public void displayUserInformation()
    {
        lblName.Content = session.user.firstName;
        lblEmail.Content = session.user.email;
        lblCreditValue.Content = Decimal.Ceiling(session.user.balance).ToString();

    }


    public void loadGrid()
    {
        try
        {
            hitoryGrid.ItemsSource = service.viewMessages(session.key, null).ToList();
        }
        catch (Exception ex)
        {
            MessageBox.Show(ex.Message);
        }
    }     

}

解决它。有两个方法具有异步调用,一个具有额外的参数唯一ID。每个调用都需要ID,因此,我将新GUID传递给它,就这样。感谢您尝试帮助我

InnerExeption消息是:
异步处理过程中出错。多个异步同时操作需要唯一的状态对象才能完成
感谢您的回复您可以发布一些代码吗?你在调用SleepAsync吗?嗨,亨克,我编辑了我的问题,以获得我正在使用的代码。我没有调用SleepAsync。谢谢你的回复,你可以展示你更正的代码,它是如何被解析的?@Ehsan Sajjad,他正在使用重载版本的方法,该方法带有一个附加参数(object userState)。作为此参数的值,他正在传递一个唯一的值-Guid.NewGuid()。这就满足了“多个异步并发操作需要唯一状态对象”的要求。