我想从静态类中释放非托管资源。
我尝试了什么: 我把类作为单例而不是静态。 并添加了一个析构函数。但是非托管资源并没有立即发布。因为析构函数不会像dispose那样被立即调用。
我没有实现Idisposable,因为我不能从用户类调用dispose方法。
答案 0 :(得分:1)
假设您有充分的理由在应用程序的生命周期内保留对象(请参阅注释部分),您仍然不应该将其存储在静态变量中。而是将其存储在代表应用程序生命周期的对象中;例如,在Windows窗体应用程序中,您可以将其存储为主窗体的成员变量,并且在Web应用程序中,您可以将其存储为HttpApplication(global.asax.cs)的成员。表单和Web应用程序本身都是一次性的,因此您可以覆盖和扩展其Dispose
方法并在那里处理您的非托管资源。当应用程序退出时,将隐式调用这两个Disposes。
class MainForm : Form
{
private readonly AutoResetEvent _global = new AutoResetEvent();
public override void Dispose()
{
_global.Dispose();
base.Dispose();
}
}