在windows phone上调用webservice

本文关键字:调用 webservice phone windows | 更新日期: 2023-09-27 18:03:28

如何在不使用service_GetItemInfoCompleted()函数的情况下调用web服务?没有service_GetItemInfoCompleted()函数能得到结果吗?

任何想法?

private void btnFind_Click(object sender, RoutedEventArgs e)
{
      Service1Client service = new Service1Client();
      service.GetItemInfoAsync(txt1.Text);
      service.GetItemInfoCompleted += new EventHandler<GetItemInfoCompletedEventArgs>(service_GetItemInfoCompleted);    
}
void service_GetItemInfoCompleted(object sender, GetItemInfoCompletedEventArgs e)
{
      txb1.Text = e.Result;
}
示例2

public void running()
{    
      ServiceReference1.WebServiceSoapClient test = new ServiceReference1.WebServiceSoapClient();
      test.ReadTotalOutstandingInvoiceCompleted += new EventHandler<ServiceReference1.ReadTotalOutstandingInvoiceCompletedEventArgs>(serviceClient);  
      test.ReadTotalOutstandingInvoiceAsync();
}
public void serviceClient(object sender, ReadTotalOutstandingInvoiceCompletedEventArgs e)
{
      answer = int.parse(e.Result.ToString());
}

在windows phone上调用webservice

上面的方法是正确的方法:将请求发送到服务,当它返回时,在文本框中显示返回的数据。

如果您在一个阻塞调用中执行了相同的操作…

private void btnFind_Click(object sender, RoutedEventArgs e)
{
    Service1Client service = new Service1Client();
    txtb1.Text = service.GetItemInfoAsync(txt1.Text);
}

…那么你的主UI线程将阻塞,直到数据从服务返回。如果服务需要几秒钟才能返回,那么你的应用UI将间歇性地"挂起"几秒钟,给你的用户一个非常糟糕的体验。这是一个不好的事情,应该不惜一切代价避免!

所以我们想异步调用你的服务,等待它返回而不阻塞线程。但是,我们可以使用新的async &await关键字在c# 5.0中实现与上述相同的目标,但代码更少&复杂性:

private async void btnFind_Click(object sender, RoutedEventArgs e)
{
    Service1Client service = new Service1Client();
    string result = await service.GetItemInfoAsync(txt1.Text);
    txtb1.Text = result;
}

注意上面代码中asyncawait的使用。async关键字告诉编译器,您希望它构建一个由await状态驱动的状态机。每个await关键字都告诉编译器向状态机添加一个新状态。当代码执行时,等待代码设置状态机,以便在等待任务(在本例中为service.GetItemInfoAsync())完成时在下一个操作中拾取。

HTH .