Car*_*r22 3 c# wpf async-await
我试图将文件(BitmapImage)保存到某个位置,但是一旦我使用async
&await
我得到一个错误,说该文件正在使用中:
该进程无法访问文件'C:\ Users\...\image1.jpg',因为它正由另一个进程使用.
我的编码:
BitmapImage image = new BitmapImage(new Uri(oldImagePath));
var encoder = new JpegBitmapEncoder() { QualityLevel = 17 };
encoder.Frames.Add(BitmapFrame.Create(image));
using (var filestream = new FileStream(GetImageLocation(), FileMode.Create))
await Task.Run(() => encoder.Save(filestream)); //Error here
Run Code Online (Sandbox Code Playgroud)
当我使用的代码没有了await
,代码工作完全正常.我想这可能是因为另一个线程可能正在使用它,但任何人都可以帮助或向我解释我的问题吗?谢谢.
在当您使用情况Task
与await
另一个线程来保存encoder
.但是您的主编码也会使用您的编码器,因此新线程无法使用它.
稍微改变你的代码:
await Task.Run(() =>
{
using (var filestream = new FileStream(GetImageLocation(), FileMode.Create))
{
BitmapImage image = new BitmapImage(new Uri(oldImagePath));
var encoder = new JpegBitmapEncoder() { QualityLevel = 17 };
encoder.Frames.Add(BitmapFrame.Create(image));
encoder.Save(filestream);
}
}
Run Code Online (Sandbox Code Playgroud)
现在您encoder
在同一个任务中创建并保存它,它将只使用一个线程.