#region 任务进行资源清理 IDisposable
/*
*
* https://www.cnblogs.com/wyt007/p/9304564.html
* 经常会听到说释放资源,那么到底什么是资源呢?简单地来说,
* 在c# 中每种类型都是一种资源,而资源又分托管资源和非托管资源
*
* 非托管资源:不受CLR(公共语言运行库,只是一个类库,一个将编程语言类型转化的类库)
* 控制的资源,也就是不属于.NET本身的功能,
* 往往是通过调用跨平台程序集(如C++)或者操作系统提供的一些接口,
* 比如Windows内核对象、文件操作、数据库连接、socket、Win32API、网络等。
*
* 托管资源:由CLR管理分配和释放的资源,也就是我们直接new出来的对象;
*
* IDisposable 是一个用于垃圾回收的接口,里面定义有一个dispose() 方法 对任务资源进行清理的方法
*
* Task 支持IDisposable 因为Task 可能在等待完成时分配一个WaitHandle.
* 由于Waithandle 支持 Idsposable(接口被继承了),所以可以用
*
*
*/
//public class MyClass : IDisposable
//{
/// <summary>
/// 模拟一个非托管资源
/// </summary>
///
/*
* IntPtr 一种特定于平台的类型,用于表示指针或句柄。
* 参考资料:
* https://www.cnblogs.com/nimorl/p/9829271.html
*/
//private IntPtr NativeResource { get; set; } = Marshal.AllocHGlobal(100);
///*
// * Marshal 提供一组方法,用于分配非托管内存、复制非托管内存块、将托管类型转换为非托管类型,
// * 以及在与非托管代码交互时使用的其他杂项方法。
// *
// * AllocHGlobal(int 内存中所需的字节数.)使用指定的字节数从进程的非托管内存中分配内存。
// *
// */
///// <summary>
///// 模拟一个托管资源
///// </summary>
//public Random ManagedResource { get; set; } = new Random();//随机类
// /// <summary>
// /// 释放标记
// /// </summary>
// private bool disposed;
// /// <summary>
// /// 为了防止忘记显式的调用Dispose方法
// /// </summary>
// ~MyClass()
// {
// //必须为false
// Dispose(false);
// }
// /// <summary>执行与释放或重置非托管资源关联的应用程序定义的任务。</summary>
// public void Dispose()
// {
// //必须为true
// Dispose(true);
// //通知垃圾回收器不再调用终结器
// GC.SuppressFinalize(this);
// }
// /// <summary>
// /// 非必需的,只是为了更符合其他语言的规范,如C++、java
// /// </summary>
// public void Close()
// {
// Dispose();//这个是 IDisposable 接口下的一个清理资源的方法
// }
// /// <summary>
// /// 非密封类可重写的Dispose方法,方便子类继承时可重写
// /// </summary>
// /// <param name="disposing"></param>
// protected virtual void Dispose(bool disposing)
// {
// if (disposed)
// {
// return;
// }
// //清理托管资源
// if (disposing)
// {
// if (ManagedResource != null)
// {
// ManagedResource = null;
// }
// }
// //清理非托管资源
// if (NativeResource != IntPtr.Zero)
// {
// Marshal.FreeHGlobal(NativeResource);
// NativeResource = IntPtr.Zero;//一个只读字段,表示已初始化为零的指针或句柄。
// }
// //告诉自己已经被释放
// disposed = true;
// }
//}
//#endregion
//#region IDisposable 成员
//public string _BarFont ="vdzvzz";
//public void Dispose()
//{
// // TODO: 添加 Code128Rendering.Dispose 实现
// this.Dispose(true);
// GC.SuppressFinalize(true);
// // GC 控制系统垃圾收集器,该服务自动回收未使用的内存。
// //SuppressFinalize 请求公共语言运行时不调用指定对象的终结器。
//}
//protected virtual void Dispose(bool disposing)
//{
// if (!disposing)
// {
// return;
// }
// else
// {
// //要释放的资源
// if (_BarFont != null) this._BarFont.Dispose();
// }
//}
#endregion