未能保存所有字节数组为png图片命名他们与时间戳

本文关键字:他们 时间戳 png 保存 字节 数组 字节数 | 更新日期: 2023-09-27 17:49:33

我试图将所有blob保存为png图片,但当我用当前时间戳命名png时,似乎保存过程中有超时并且只有最后一个blob成功。如果我设置2秒延迟,只有它可以保存所有

reportthread_image是从mysql数据库中检索到的blob(在本例中为4 blob)的List<byte[]>

foreach (byte[] rt_image in reportthread_image)
{
    if (rt_image.Count() != 0)
    {
        try
        {
            ms = new MemoryStream(rt_image);
            fullsizeImage = Image.FromStream(ms);
            newImage = fullsizeImage.GetThumbnailImage(pictureBox1.Width, pictureBox1.Height, null, IntPtr.Zero);
            pictureBox1.Image = newImage;
            bm = new Bitmap(pictureBox1.Image);
            count++;
            //only can save last image without delay
            //Thread.Sleep(2000); //need long enough delay to save all
            //bm.Save(DateTime.Now.ToString("yyMMddHHmmss") + ".png", ImageFormat.Png);//can save all blobs to png.
            bm.Save(count + ".png", ImageFormat.Png);//no error will occurs here.
            ms.Dispose();
            bm.Dispose();
        }
        catch (Exception ex)
        {
            MessageBox.Show(ex.ToString());
        }
    }
}

我可以知道,我怎么能保存图像与当前时间戳,只进行下一个元素后完成保存过程在reportthread_image?我试过lock(),我试过Invoked()

而我却看不懂

为什么进程不等待保存进程完成只进行下一行??

未能保存所有字节数组为png图片命名他们与时间戳

因为您覆盖了先前保存的文件。在文件名中包含毫秒数,请放心。

bm.Save(DateTime.Now.ToString("yyMMddHHmmssfff") + ".png", ImageFormat.Png);

我认为睡眠线程不是一个好主意。为了更准确,您必须在生成的名称中使用保证可变因子,因为DateTame的准确性不够。像这样:

bm.Save(DateTime.Now.ToString("yyMMddHHmmss") + "_" + count++ + ".png", ImageFormat.Png);
然后