0

画像のダウンロードと携帯電話のメディアライブラリへの保存を処理する次のコードがあります。System.UnauthorizedAccessExceptionクロススレッドアクセスがあったかのように失敗します。私が理解しているように、awaitステートメントの下のすべてのコードはUIスレッドで実行されるため、これは問題にはなりません。さらに、以下のコードをでラップしようとvar stream = await client.OpenReadTaskAsync(this.Url);しましDeployment.Current.Dispatcher.BeginInvokeたが、役に立ちませんでした。:(後でコードをWP7に移植することを目的として、これをWP8で実行しています。

    private async void OnSaveImageCommand()
    {
        RunProgressIndicator(true, "Downloading image...");
        var client = new WebClient();
        try
        {
            var stream = await client.OpenReadTaskAsync(this.Url); 

            var bitmap = new BitmapImage();
            bitmap.SetSource(stream);

            using (var memoryStream = new MemoryStream())
            {
                var writeableBitmap = new WriteableBitmap(bitmap);
                writeableBitmap.SaveJpeg(memoryStream, writeableBitmap.PixelWidth, writeableBitmap.PixelHeight, 0,
                                         100);
                memoryStream.SetLength(memoryStream.Position);
                memoryStream.Seek(0, SeekOrigin.Begin);

                var mediaLibrary = new MediaLibrary(); 
                mediaLibrary.SavePicture("image.jpg", memoryStream);
                MessageBox.Show("Image has been saved to the phone's photo album");
            }
        }
        catch 
        {
            MessageBox.Show("Failed to download image"); 
        }
        finally
        {
            RunProgressIndicator(false);
        }
    }
4

1 に答える 1

8

アプリのマニフェストにID_CAP_MEDIALIB_PHOTO機能を追加しましたか?

ID_CAP_MEDIALIB_PHOTO

UnauthorizedAccessExceptionは、99%の確率で機能が不足しています。

于 2013-01-17T20:26:30.037 に答える