我遇到了一個問題,我無法找到任何解決方案,並且我發現很難相信我是唯一出現此錯誤的人。在Webrequest和WP8中使用便攜式類庫
我有這一塊的C#代碼在便攜式類庫
static public void GetAnimeListFromWeb(ObservableCollection<AnimeViewModel> collection, string Url, string encodedLogin = "")
{
WebRequest request = WebRequest.Create(Url);
request.Headers["Authorization"] = encodedLogin;
IAsyncResult asyncResult = request.BeginGetResponse(new AsyncCallback(s => {
WebResponse response = (s.AsyncState as WebRequest).EndGetResponse(s);
XDocument doc = XDocument.Load(response.GetResponseStream());
IEnumerable<AnimeViewModel> result = ParseAnimeXML(doc);
collection = (ObservableCollection<AnimeViewModel>)result;
}), request);
}
當我編譯這一點,建立和代碼也可以在我寫來測試它的一小控制檯程序。但是,當在Windows Phone 8應用程序中測試時,它會崩潰
WebResponse response = (s.AsyncState as WebRequest).EndGetResponse(s);
它引發ArgumentException。當我檢查's'變量時,它說AsyncWaitHandle給了一個NotSupportedException。
我的問題是,我該如何制定一個適用於所有平臺的正確的Webrequest?
編輯:也許是要注意,我針對.NET 4.5,SL4高,WP7是有用的更高和.NET爲Windows應用商店的應用程序
我無法重現這一點。忽略這是一個紅鯡魚的AsyncWaitHandle,並且不相關(我們只是不支持等待異步結果)。這是上面的確切repro? ArgumentException實際來自EndGetResponse嗎?當您傳遞的IAsyncResult不是來自request.BeginGetResponse方法的一個IAsyncResult時,它會引發ArgumentException。 –
是的,這正是它崩潰的代碼,使用不同的語法對它進行了多次測試,但它在該行上都崩潰,說AsyncWaitHandle拋出NotSupportedException –
讓我們退後一步。你可以嘗試在獨立的Windows Phone 8項目中重新排除可移植類庫嗎?這是否發生在模擬器中?如果是這樣的模擬器,Windows Phone 7或Windows Phone 8? –