0

我目前正在创建一个 Windows 商店应用程序 (C#),它定期(每 3 秒)从 URL 中提取图像并将其显示在页面上。图像已成功下载到临时应用程序存储一次,但第二次出现访问被拒绝 (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

尝试使用 ReaderWriterLockSlim 类处理文件。 http://msdn.microsoft.com/en-us/library/system.threading.readerwriterlockslim.aspx

于 2013-03-17T04:45:17.680 回答
0

您可以使用不同的名称存储每个下载的文件(例如,通过在根文件名中添加时间戳或序号)。下载后,您可以将源设置为这个新下载的文件,然后删除之前的文件。

于 2013-03-17T05:45:05.253 回答