同时访问流

本文关键字:访问 | 更新日期: 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,从而将位置重置回开始位置。