同时访问流
本文关键字:访问 | 更新日期: 2023-09-27 18:04:26
我试图多次重用相同的流。一个用于调整图像大小,另一个用于上传图像。虽然它确实可以调整图像的大小,但它似乎锁定了上传文件的其他方法。我试过用Stream. copyto (MemoryStream)复制流,然后用它来上传,但它仍然没有什么不同。
我正在使用PhotoChooserTask打开一个流。然后,我将流传递给ImageThumbnail方法,该方法创建图像的缩略图,然后将其保存到IsolatedStorage,如下所示:
public static void SaveThumbnail(Stream imageStream, string fileName, double imageMaxHeight, double imageMaxWidth)
{
var bitmapImage = new BitmapImage();
bitmapImage.SetSource(imageStream);
var resizedImage = new WriteableBitmap(bitmapImage);
using (var isolatedStorage = IsolatedStorageFile.GetUserStoreForApplication())
{
double scaleX = 1;
using (var fileStream = isolatedStorage.CreateFile(fileName))
{
//do stuff for resizing here...
resizedImage.SaveJpeg(fileStream, newWidth1, newHeight1, 0, 100);
}
}
}
同时,我正在从PhotoChooserTask中重用相同的流来上传图像。无论如何,它似乎是相互锁定的,并且没有抛出错误。
提示吗?
您需要将流复制到字节数组中,因为流在使用过程中会发生变化,并且无法克隆。
public static void CopyStream(Stream input, Stream output)
{
byte[] buffer = new byte[32768];
while (true)
{
int read = input.Read (buffer, 0, buffer.Length);
if (read <= 0)
return;
output.Write (buffer, 0, read);
}
}
复制到MemoryStream应该可以做到这一点。要重用内存流,需要将position属性设置为0,从而将位置重置回开始位置。