我目前正在创建一个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;
}
}
}
}
答案 0 :(得分:0)
尝试使用ReaderWriterLockSlim类处理文件。 http://msdn.microsoft.com/en-us/library/system.threading.readerwriterlockslim.aspx
答案 1 :(得分:0)
您可以使用其他名称存储每个下载的文件(例如,通过向根文件名添加时间戳或序号)。下载后,您可以将源设置为此新下载的文件,然后删除之前的文件。