2

Twitter フィードをすべてダウンロードする WP7 アプリを作成しています。これで、すべてのプロファイル画像をダウンロードしてローカルに保存して使用し、アプリを開くたびにダウンロードされるようにします。そうする方法のいずれかを提案してください。

私がやっていること: WebClient を使用して画像をダウンロードする

public MainPage()
    {
        InitializeComponent();

        WebClient client = new WebClient();
        client.DownloadStringCompleted += new DownloadStringCompletedEventHandler(client_DownloadStringCompleted);
        client.DownloadStringAsync(new Uri("http://www.libpng.org/pub/png/img_png/pnglogo-blk.jpg"));
    }

そしてそれをファイルに保存します。

 void client_DownloadStringCompleted(object sender, DownloadStringCompletedEventArgs e)
    {            
        using (IsolatedStorageFile myIsolatedStorage = IsolatedStorageFile.GetUserStoreForApplication())
        {
            if (myIsolatedStorage.FileExists(fileName1))
                myIsolatedStorage.DeleteFile(fileName1);


            var fileName1 = "Image.jpg";
            using (var fileStream = new IsolatedStorageFileStream(fileName1, FileMode.Create, myIsolatedStorage))
            {
                using (var writer = new StreamWriter(fileStream))
                {
                    var length = e.Result.Length;
                    writer.WriteLine(e.Result);
                }
                var fileStreamLength = fileStream.Length;
                fileStream.Close();
            }
        }

今、画像を BitMapImage に設定しようとしています

BitmapImage bi = new BitmapImage();

using (IsolatedStorageFile myIsolatedStorage = IsolatedStorageFile.GetUserStoreForApplication())
{
    using (IsolatedStorageFileStream fileStream = myIsolatedStorage.OpenFile(fileName1, FileMode.Open, FileAccess.Read))
    {
         var fileStreamLength2 = fileStream.Length;
         bi.SetSource(fileStream);
    }
}

しかし、BitmapImage のソースを設定できません。System.Exception をスローしていますが、具体的なものは何もありません。私はそれを正しい方法でやっていますか?手続きのことです。

編集別の観測は、fileStreamLength と fileStreamLength2 が異なることです。

4

1 に答える 1

3

DownloadString を使用してバイナリ ファイルをダウンロードすることは想定されていません。代わりに OpenReadAsync を使用し、バイナリ配列を分離ストレージに保存します。

DownloadString は、データを UTF-16 テキストに変換しようとしますが、これはもちろん画像を扱う場合には正しくありません。

于 2012-04-25T17:40:01.910 に答える