可不可以显示的释放Winform的资源,对Winform中的Dispose方法进行覆盖,比如这种方法:
/// <summary>
/// 清理所有正在使用的资源。
/// </summary>
protected override void Dispose( bool disposing )
{
if( disposing )
{
if (components != null)
{
components.Dispose();
}
}
base.Dispose( disposing );
}请问这种方法是手动释放还是GC自动释放。怎样写改为,用户手动释放,应该怎样写
/// <summary>
/// 清理所有正在使用的资源。
/// </summary>
protected override void Dispose( bool disposing )
{
if( disposing )
{
if (components != null)
{
components.Dispose();
}
}
base.Dispose( disposing );
}请问这种方法是手动释放还是GC自动释放。怎样写改为,用户手动释放,应该怎样写
解决方案 »
- 求Windows电源管理API....
- C#编程 用C#设计一个日期类Date,能够完成显示日期,调整日期,按日调整日期 请大家给予一些指教!
- 请教
- WebRequest 执行报错,请大家帮忙解决,谢谢!
- 水晶报表无效密钥号码问题???急求!
- 采采鸟问题 如何定义全局变量?
- 如何在RichTexBox中显示一个无限分类的树型结构?(解决即刻解贴!!!!!)
- 怎么在C#中copy目录,没有现成的方法呢??
- wpf inkcanvas 判断画笔颜色重叠
- MDI窗体中的DataGridView把其它的子窗体给挡住了
- savefiledialog 问题
- datagridview中有个comboboxcolumn列,每行能绑定不同数据源吗?
((IDisposable)form1).Dispose();都是手动释放当然无论手动自动,都会调用到你说的这个函数
那看你把代码写在什么地方了,有的写在异常里,try{}catch{} 有的代码执行完释放关闭! 先打开Open();写你执行的代码、写完了,释放资源、关闭! 也就是关门放狗
Q2:在实现Dispose接口的时候,释放非托管资源的代码段应该写什么?
Q3:托管资源本来就由GC来处理,我想在实现Dispose接口的时候,无需手动写释放托管资源的代码吧?A1:这是显然的,在.NET框架类库中实现IDisposable接口的基本是持有非托管资源的类型,例如IDbConnection、Font、Brush、Steam、TextReader等等,从名字就可以看出端倪;
A2:应该怎么写,取决于你释放的非托管资源是什么,一般来说就是调用Win API完成资源清理,例如对于数据库资源资源你通常:
if (disposing)
{
if (connection != null)
connection.Dispose();
}
而对于文件资源,你可能
if (fileHandle != IntPtr.Zero)
{
CloseHandle(fileHandle);
fileHandle = IntPtr.Zero;
}
A3:记住,永远避免自行处理托管资源。