我有一个将 XML 数据异步上传到 Web 服务的 WPF 应用程序。我从非 UI 线程调用 Web 服务:
Task.Factory.StartNew(() => {
WebServiceHelper.ImportMarketDataAsync(....);
});
我已经使用 wsdl.exe 生成了代理。代理类提供了两种不同的方式来异步调用 Web 服务函数:
1) *方法名*异步
2) 开始*方法名* & 结束*方法名*
第一种方法使用 SoapHttpClientProtocol.InvokeAsync,第二种方法使用 SoapHttpClientProtocol.BeginInvoke。
在任何一种情况下,当代理点击调用函数(即 InvokeAsync 或 BeginInvoke)时,都会从 UI 线程内调用 Web 服务调用,因此由于 UI 线程很忙,因此应用程序似乎没有响应。如果我在 foreach 循环中为一组 250 个元素的集合调用异步函数,UI 将冻结,直到所有异步调用完成。
有没有办法在不阻塞主 UI 线程的情况下调用 asmx Web 服务?
先谢谢了!