2012-05-08 179 views
1

我有一个WPF应用程序,它将XML数据异步上传到Web服务。我把从非UI线程Web服务:ASMX Web服务 - SoapHttpClientProtocol.InvokeAsync

Task.Factory.StartNew(() => { 
    WebServiceHelper.ImportMarketDataAsync(....); 
}); 

我已生成使用Wsdl.exe用代理。代理类提供两种不同的方法来异步调用Web服务功能:

1)*方法名*异步

2)开始*方法名* &结束*方法名*

第一种方法使用SoapHttpClientProtocol。 InvokeAsync,第二种方法使用SoapHttpClientProtocol.BeginInvoke。

在这两种情况下,当代理命中invoke函数(即InvokeAsync或BeginInvoke)时,将从UI线程内调用Web服务调用,因此应用程序由于UI线程繁忙而显得无响应。如果我在foreach循环中为250个元素的集合调用异步函数,UI将冻结,直到所有异步调用完成。

有没有一种方法可以调用asmx web服务而不阻塞主UI线程?

感谢先进!

+0

Afaik wpf是asmx的替代品。您正在使用一种或两种。 Asmx几乎已经过时了 – Independent

+0

感谢Jonas的评论。你的意思是WCF吗? –

+0

是的,WCF当然。虽然,是一个侧面说明。我没有看到你的问题是否与Webservice相关,或者它是否具有gui responsivity的问题,你可以通过在新的Thread中而不是Task中启动请求来解决这个问题。 – Independent

回答

0

当应用程序连接到VS2010进行调试时,UI将冻结。当我自己运行应用程序时,应用程序不会冻结。与调试器有关。