c# - 在不使用应用程序的 Dispose() 方法的情况下关闭/处置应用程序时调用 FACTORY 类中的方法

标签 c# .net vb.net

如果您是 VB.NET 或 C# 或其他 .NET 开发人员,我无所谓。无论使用何种语言,我们都将不胜感激。真的在寻找一个想法...

我有一个像下面这样的 FACTORY 类:

Public Class MyFactory
    Public Shared theStuffICreated as List(Of Stuff)
    Public Shared/Static Sub Create(...)
         ...
    End Sub

    Public Shared/Static Sub ThingsToDoWhenClassIsDestroyed()
         ...
    End Sub
End Class

当此类被终结器“销毁”时,如何确保调用 ThingsToDoWhenClassIsDestroyed()。我明白,因为一切都是共享/静态的,所以它从来没有真正被创建过,但是它在某个地方是否有一些足迹需要被销毁?假设此类可由多个 GUI 和控制台应用程序使用,并且在每个 GUI 的 Dispose 方法中调用 MyFactory.ThingsToDoWhenClassIsDestroyed() 是不可行的。有什么想法吗?

最佳答案

如您所述,此类永远不会有实例,因此终结器无需执行任何操作。

您可以加入 Application.Exit事件。但不确定这与避免应用程序的 Dispose() 方法(无论是什么)有何不同。但至少您可以从您的代码中绑定(bind)到此事件,因此清理是完全独立的。

或者还有一些技巧,例如:

public class MyFactory
{
    static private MyFactory _factory;

    static MyFactory()
    {
        _factory = new MyFactory();
    }

    ~MyFactory()
    {
        // Do Cleanup
    }
}

所以你可以保持所有你的单例逻辑静态,但是在静态构造函数中创建你的类的一个实例,并在终结器中调用你的清理,它只会在你的静态类超出范围时被调用(即在申请结束)。

编辑:在评论中,您声明此时要发送电子邮件并更新数据库。当 CLR 完成堆上的最后一个对象时,我希望你已经来不及做这样的事情了。因此,您又回到了使用诸如 Application.Exit 之类的事件。

关于c# - 在不使用应用程序的 Dispose() 方法的情况下关闭/处置应用程序时调用 FACTORY 类中的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9912846/

相关文章:

c# - 有没有办法通过反射或其他方式获取实体 ID 字段的名称?

c# - 为什么在 .NET 中没有保留一些相同的字符串?

.net - LINQ - 数组属性包含另一个数组中的元素

c# - 跟踪在从 VB6 EXE 加载的 .NET DLL 中不起作用

.net - 如何获取可执行文件的版本?

javascript - 通过 javascript 检索隐藏字段值

c# - 在 .Net 中获取 CryptoStream 的长度

c# - 无法使用 `new` 关键字从函数修改对象

c# - Nlog Target Database 在运行时设置连接信息

C#:异步运行此代码的不同方法?