首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > C# >

在picturebox显示一张图片,然后dispose还是删不了,说图片被进程使用,请教要删图片怎么关闭进程

2014-01-09 
在picturebox显示一张图片,然后dispose还是删不了,说图片被进程使用,请问要删图片如何关闭进程在picturebo

在picturebox显示一张图片,然后dispose还是删不了,说图片被进程使用,请问要删图片如何关闭进程
在picturebox显示一张图片,然后dispose还是删不了,说图片被进程使用,请问要删图片,知道这张图片的名字如何关闭使用这张图片的进程
[解决办法]
你PictureBox里还使用着这张图片呢,你怎么能删除,当然又处于被独占状态。

先将PictureBox控件里图片清空,然后才可以删除的。
[解决办法]
做一个项目的时候,用到了图片的操作,当用Picturebox显示图片时是用的


Image.FromFile(ImageRul);这个方法来显示图片的,

如果这时想把图片给删除的话,会报错,提示该图片正在使用中,

后来找到一个方法,就是将该图片以流的方式加载进来,然后在赋给Picturebox,这样不存在删除的时候报错了。

调用的时候用:

Image.FromStream(ByteToStream(SetImageToByteArray(ImageUrl)));

下面是封装好的方法:



#region 将文件转换成流
        //public byte[] SetImageToByteArray(string fileName, ref string fileSize)
        /// <summary>
        /// 将文件转换成流
        /// </summary>
        /// <param name="fileName">文件全路径</param>
        /// <returns></returns>
        public byte[] SetImageToByteArray(string fileName)
        {
            byte[] image = null;
            try
            {
                FileStream fs = new FileStream(fileName, FileMode.Open);
                FileInfo fileInfo = new FileInfo(fileName);
                //fileSize = Convert.ToDecimal(fileInfo.Length / 1024).ToString("f2") + " K";
                int streamLength = (int)fs.Length;
                image = new byte[streamLength];
                fs.Read(image, 0, streamLength);
                fs.Close();
                return image;
            }
            catch
            {
                return image;
            }
        }
        #endregion

        #region 将byte转换成MemoryStream类型
        /// <summary>
        /// 将byte转换成MemoryStream类型
        /// </summary>
        /// <param name="mybyte">byte[]变量</param>
        /// <returns></returns>
        public MemoryStream ByteToStream(byte[] mybyte)
        {
            MemoryStream mymemorystream = new MemoryStream(mybyte, 0, mybyte.Length);
            return mymemorystream;
        }
        #endregion 

        #region 将byte转换成Image文件
        /// <summary>
        /// 将byte转换成Image文件
        /// </summary>
        /// <param name="mybyte">byte[]变量</param>
        /// <returns></returns>


        public Image SetByteToImage(byte[] mybyte)
        {
            Image image;
            MemoryStream mymemorystream = new MemoryStream(mybyte, 0, mybyte.Length);
            image = Image.FromStream(mymemorystream);
            return image;
        }
        #endregion



[解决办法]
把你加载图片的代码贴出来看看。
[解决办法]
你直接拷贝过去使用就是了,不就几个方法嘛,你先试试看可行再说!
[解决办法]
this.pictureBox1.Image.Dispose();
this.pictureBox1.Image = null;
之后再删,用FromFile也没关系。
[解决办法]
你还真杯具,你该不是开着图片删吧。

我也冒傻了 = null 和占用也没有关系。。。Dispose也就OK了。

private void button1_Click(object sender, EventArgs e)
{
    if (openFileDialog1.ShowDialog() != System.Windows.Forms.DialogResult.OK)
        return;
    var filename = openFileDialog1.FileName;
    if (!File.Exists(filename))
        return;
    this.pictureBox1.Image = Image.FromFile(filename);
}

private void button2_Click(object sender, EventArgs e)
{
    var filename = openFileDialog1.FileName;
    if (!File.Exists(filename))
        return;
    var name = Path.GetFileNameWithoutExtension(filename);
    var newName = name + "_" + Guid.NewGuid().ToString("n");
    var ext = Path.GetExtension(filename);
    newName = Path.Combine(Path.GetDirectoryName(filename), newName);
    this.pictureBox1.Image.Dispose();
    this.pictureBox1.Image = null;
    //File.Move(filename, newName + ext);
    File.Delete(filename);
}

热点排行