winform c#删除图片提示文件被占用

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了winform c#删除图片提示文件被占用相关的知识,希望对你有一定的参考价值。

图片是在imagelist里面,然后通过listview(lv2)绑定显示图片,选中listview项目,点击删除,提示图片被占用,无法访问。。。
偶尔又能删除一两次,这个是什么原因呢?

可能发生一下情况,图片文件被电脑里的图片查看工具打开。也就是说这个图片正在被使用,无法删除。第二个情况是你的程序对该图片进行了使用,但没有即使释放也会出现这个问题。追问

1、没有使用图片查看工具打开,没有开其他任何程序
2、如果是这个原因,怎么解决呢?我用过Thread.Sleep(500)尝试,无用。

追答

你在读取图片的时候 看文件流释放了没有

参考技术A

你的图片是不是用image.FromFile加到imagelist里的,如果是改成这种模式

FileStream fileStream = new FileStream(filePath, FileMode.Open,FileAccess.Read);
int byteLength = (int)fileStream.Length;
byte[] fileBytes = new byte[byteLength];
fileStream.Read(fileBytes, 0, byteLength);
//文件流关闭,文件解除锁定
fileStream.Close();
ImageList1.Images.Add(Image.FromStream(new MemoryStream(fileBytes)));

本回答被提问者采纳

C# WinForm应用程序降低系统内存占用方法总结

WinForm程序点用一直是个大问题,时间运行长了,越来越大,最近在网上发现个贴,试了上面方法,从进程来看,内存确实降下去了,效果还不错。

 

这里整理了一些网上关于Winform如何降低系统内存占用的资料,供参考:

1、使用性能测试工具dotTrace 3.0,它能够计算出你程序中那些代码占用内存较多
2、强制垃圾回收
3、多dispose,close
4、用timer,每几秒钟调用:SetProcessWorkingSetSize(Process.GetCurrentProcess().Handle, -1, -1);具体见附录。
5、发布的时候选择Release
6、注意代码编写时少产生垃圾,比如String + String就会产生大量的垃圾,可以用StringBuffer.Append
7、this.Dispose();    this.Dispose(True);   this.Close();    GC.Collect();  
8、注意变量的作用域,具体说某个变量如果只是临时使用就不要定义成成员变量。GC是根据关系网去回收资源的。
9、检测是否存在内存泄漏的情况,详情可参见:内存泄漏百度百科

附录:定期清理执行垃圾回收代码:
//在程序中用一个计时器,每隔几秒钟调用一次该函数,打开任务管理器,你会有惊奇的发现
#region 内存回收
[DllImport("kernel32.dll", EntryPoint = "SetProcessWorkingSetSize")]
public static extern int SetProcessWorkingSetSize(IntPtr process, int minSize, int maxSize);
/// <summary>
/// 释放内存
/// </summary>
public static void ClearMemory()
{
GC.Collect();
GC.WaitForPendingFinalizers();
if (Environment.OSVersion.Platform == PlatformID.Win32NT)
{
App.SetProcessWorkingSetSize(System.Diagnostics.Process.GetCurrentProcess().Handle, -1, -1);
}
}
#endregion

 

 

原文:https://www.jb51.net/article/56682.htm

以上是关于winform c#删除图片提示文件被占用的主要内容,如果未能解决你的问题,请参考以下文章

求 在C#中winform窗体中的所有好看提示方式的消息盒子

C# ,winform,如何清空或者删除一个文本文档(.txt 文件),路径已知

c# 保存图片文件 winform

c# winforms GetCurrentDirectory 返回 C:\WINDOWS\System32\ 设计错误

c# winform如何用一个图片来代替一个窗体的关闭按钮?

C# Winform版批量压缩图片程序