2 つの WP8 アプリで同じメソッドを使用しています。同じ URL と同じデバイスを指定すると、メソッドは 1 つのアプリでは機能しますが、他のアプリでは機能しません。失敗したアプリでは、GetAsync が呼び出された後にハングしています。タイムアウトなし、例外なし。
これが問題の方法です。
private async Task<Byte[]> DownloadData(string uri)
{
byte[] myDataBuffer = null;
var newUri = new Uri(uri, UriKind.Absolute);
var myWebClient = new HttpClient();
var response = await myWebClient.GetAsync(newUri);
if (response.Content.Headers.ContentType.MediaType == "text/plain"
|| response.Content.Headers.ContentLength < 200)
{
throw new Exception(await response.Content.ReadAsStringAsync());
}
myDataBuffer = await response.Content.ReadAsByteArrayAsync();
return myDataBuffer;
}
これは、特定のアプリでは毎回発生しますが、他のアプリでは発生しません。同じデバイス。誰もこの行動を経験したことがありますか?URL は有効で、コードは同じです。これに影響を与える可能性のあるプロジェクト設定はどこかにありますか? 失敗したアプリの別の部分で HttpClient を使用していますが、そこで動作します。
HttpWebRequest を使用するようにコードを変更すると、問題なく動作します。HttpClientだけではありません。
メソッドを button_click ハンドラーにコピーすると、そこでも機能することがわかりました。このメソッドを別のクラス内に置くことに問題はありますか? それは私には奇妙に思えます。
アップデート
それを壊しているように見えるのは、それを呼び出す非同期メソッドの複数のレイヤーです。私が持っているクラスの中で
public override byte[] GetImageData(string imageUri)
{
return GetImageDataAsync(imageUri).Result;
}
public async Task<byte[]> GetImageDataAsync(string imageUri)
{
return await DownloadData(imageUri);
}
私のbutton_clickハンドラーから、私は呼び出してGetImageData(uri)
います。それを変更するawait GetImageDataAsync(uri)
と動作します。
Result
で参照する正しいプロパティではありませんかGetImageData
?
ここにテスト URL " http://www.rei.com/pix/common/REI_logo.gif "があります。