2

解決策が見つからない問題があり、このエラーが発生したのは私だけだとは信じがたいです。

ポータブル クラス ライブラリにこの 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 をターゲットにしていることに注意してください。

4

1 に答える 1

0

私の意見では、DownloadStringAsync のようなこのタスクを実行するには、最新の Asyc/Await コンセプトを使用する必要があります。Async/Await は、Windows 8 および Windows Phone 8 でサポートされている唯一のメカニズムであるためです。ただし、このコードを使用して複数のプラットフォーム用にビルドすると、コンパイラはさまざまなプラットフォームの複雑さを処理し、必要なコードを生成します。

于 2012-11-09T01:47:45.703 に答える