如何在c#中处理静态类中的非托管对象?

时间:2017-11-17 09:55:02

标签: c# .net

我想从静态类中释放非托管资源。

我尝试了什么: 我把类作为单例而不是静态。 并添加了一个析构函数。但是非托管资源并没有立即发布。因为析构函数不会像dispose那样被立即调用。

我没有实现Idisposable,因为我不能从用户类调用dispose方法。

1 个答案:

答案 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();
    }
}