現在、一定の間隔 (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;
}
}
}
}