2011-07-23 23 views
2

我的silverlight應用程序從asmx web服務(比如set A和set B,set A有幾個文件,set B有大量文件)從異步獲取兩組文件。在接收一個集合中的每個文件時,它應該被解析並且需要更新一些數據結構。 只要接收到整個集合A,就會向Web服務發出異步請求以獲取集合B.使用單獨工作線程改善異步任務的UI響應

收到集合A後,應用程序就可以使用了。但由於文件仍然從B組收到,因此用戶界面不太靈敏。有什麼辦法可以提高文件在後臺獲取和處理時的響應速度。 web服務處理程序的async_task_completed是否可以在不同的線程上工作。有一個BackgroundWorker線程有意義嗎?

編輯:只是爲了澄清,一組(數百個文件)的異步請求一起發佈。

+0

您能檢測到無響應的確切原因嗎? UI線程上的執行代碼,由UI線程上的開始/結束異步請求創建的開銷,異步請求的數量,還是什麼? –

+0

試用Silverlight 5測試版。它應該解決一些與網絡相關的性能問題。如果它有幫助,那麼你很好,如果不是,那麼它的東西。 – Denis

+0

開銷是接收和處理文件。我不確定它在UI線程上。我沒有明確地創建線程,所以我想它應該在UI線程上。 – devnull

回答

2

把猜測工作排除在等式之外。只需將該行暫時放入Web服務調用的完成代碼即可。

MessageBox.Show(Deployment.Current.Dispatcher.CheckAccess().ToString()); 

如果您看到「True」,則表示您在UI線程中,因此您(至少)需要脫機才能執行處理。正如你所建議的一個簡單的方法是使用BackgroundWorker

如果您看到「False」,您已經在後臺線程中,因此如果出現其他來源,您的性能會出現問題。