我將一些代碼從完整的.NET框架移植到WP7版本,並且遇到了同步和異步調用的問題。在Silverlight WP7中僞造同步調用
string response;
string requestString = GenerateReqString();
HttpWebRequest req = (HttpWebRequest) WebRequest.Create("endpoint");
req.Method = "POST";
req.ContentType = "text/xml";
req.ContentLength = requestString.Length;
StreamWriter sw = new StreamWriter (req.GetRequestStream(), System.Text.Encoding.ASCII);
sw.Write(requestString);
sw.Close();
StreamReader sr = new StreamReader(req.GetResponse().GetResponseStream());
response = sr.ReadToEnd();
sr.Close();
然後將響應字符串解析爲方法返回的對象列表。
我遇到的問題是沒有辦法在Silverlight/WP7中同步進行調用。如果我使用回調函數,我將得到不同函數的響應,並且不能從原始函數返回它。有沒有辦法讓這個調用同步或者從CallBack函數返回到啓動異步調用的方法?
可以說ProcessWebResponseResult()從字符串中創建一個對象,並調用DoSomethingAsync()需要返回該對象的函數。那可能嗎? – CACuzcatlan 2010-08-17 17:05:49
這是錯過了重點。調用DoSomethingAsync的方法將函數傳遞給DoSomethingAsync。傳遞的函數是「如何處理這個函數的結果」。隨着您的需要更多,您可以爲呼叫鏈添加額外的繼續功能。 – 2010-08-17 17:38:01
這是你如何看待一個正常運行的程序:'A(); B(); C();'。然而,當你使用'延續傳球風格'執行時,你告訴每個功能完成後該怎麼做。而不是「我從這個函數中得到我的結果」,而是通過委託人說「我告訴這個函數如何處理它的結果」。 – 2010-08-17 17:41:42