2012-05-08 177 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將凍結。當我自己運行應用程序時,應用程序不會凍結。與調試器有關。