在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());
}
上面的方法是正确的方法:将请求发送到服务,当它返回时,在文本框中显示返回的数据。
如果您在一个阻塞调用中执行了相同的操作…
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;
}
注意上面代码中async
和await
的使用。async关键字告诉编译器,您希望它构建一个由await状态驱动的状态机。每个await关键字都告诉编译器向状态机添加一个新状态。当代码执行时,等待代码设置状态机,以便在等待任务(在本例中为service.GetItemInfoAsync()
)完成时在下一个操作中拾取。
HTH .