Skip to main content
 首页 » 编程设计

c#之在 Webrequest 和 WP8 中使用可移植类库

2024年01月01日44zhwl

我遇到了一个找不到任何解决方案的问题,我很难相信我是唯一遇到此错误的人。

我在可移植类库中有这段 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 及更高版本以及适用于 Windows 应用商店应用程序的 .NET

请您参考如下方法:

在我看来,您需要使用最新的 Asyc/Await 概念来执行此任务,例如 DownloadStringAsync。因为 Async/Await 是 Windows 8 和 Windows Phone 8 中唯一支持的机制。但是,当您使用此代码并为多个平台构建它时,编译器将处理不同平台的复杂性并生成所需的代码。