0

現在、一定の間隔 (3 秒ごと) で URL から画像を取得してページに表示する Windows ストア アプリ (C#) を作成しています。イメージは 1 回、アプリの一時ストレージに正常にダウンロードされますが、2 回目はアクセス拒否 (UnauthorizedAccessException) が発生します。

これは、アプリが新しいイメージでファイルを上書きしようとしたときに、ファイルをビットマップのソースとして使用している (まだ開いている) ためである可能性が最も高いです。

並行性の問題を回避する回避策はありますか?

public async void GetLocalImageAsync(string internetUri, string uniqueName)
   {
       //Set up the web request and pass credentials.
       HttpWebRequest request = (HttpWebRequest)WebRequest.Create(internetUri);
      request.Credentials = new NetworkCredential("james", "jam3s");
        //get response
          using (var response = await request.GetResponseAsync())
          {
              using (var stream = response.GetResponseStream())
              {
                  var desiredName = string.Format(uniqueName);
                  //create the file.
                  var file = await ApplicationData.Current.TemporaryFolder.CreateFileAsync(desiredName, CreationCollisionOption.ReplaceExisting);

                  using (var filestream = await file.OpenStreamForWriteAsync())
                  {
                      await stream.CopyToAsync(filestream);

                      //update the bitmap image with the file we just downloaded.
                      BitmapImage c1src = new BitmapImage(new Uri("ms-appdata:///temp/camera1imgsrc.png"));
                      camera1img.Source = c1src;

                  }
              }
          }


   }
4

2 に答える 2

0

ダウンロードした各ファイルを別の名前で保存できます (たとえば、ルート ファイル名にタイムスタンプまたは連番を追加することにより)。ダウンロードした後、ソースをこの新しくダウンロードしたファイルに設定し、その後前のファイルを削除できます。

于 2013-03-17T05:45:05.253 に答える
0

ReaderWriterLockSlim クラスでファイルを処理してみてください。 http://msdn.microsoft.com/en-us/library/system.threading.readerwriterlockslim.aspx

于 2013-03-17T04:45:17.680 に答える