C# 在ASP.NET MVC中,如何在应用程序生命周期内只初始化和反初始化一次
我有一个静态类,我需要在第一次使用的类期间初始化一些代码,并在应用程序进程死亡时取消初始化。实际上,init方法使用pJoNK方法调用本机C++ ++ API。我知道我可以使用静态构造函数,但现在我需要在最后调用一个本机de init方法C# 在ASP.NET MVC中,如何在应用程序生命周期内只初始化和反初始化一次,c#,asp.net,asp.net-mvc,asp.net-mvc-5,C#,Asp.net,Asp.net Mvc,Asp.net Mvc 5,我有一个静态类,我需要在第一次使用的类期间初始化一些代码,并在应用程序进程死亡时取消初始化。实际上,init方法使用pJoNK方法调用本机C++ ++ API。我知道我可以使用静态构造函数,但现在我需要在最后调用一个本机de init方法 public static class MyClass { static MyClass() { MyInitFirstTime(); } 静态类没有任何本机方法,但您可以改用AppDomainDoma
public static class MyClass
{
static MyClass()
{
MyInitFirstTime();
}
静态类没有任何本机方法,但您可以改用AppDomain
DomainUnload
event:
public static class MyClass
{
static MyClass()
{
AppDomain.CreateDomain("dummy").DomainUnload += CurrentDomain_DomainUnload;
MyInitFirstTime();
}
private static void CurrentDomain_DomainUnload(object sender, EventArgs e)
{
// Free resources
}
}
您可以使用Application\u Start和Application\u End“特殊方法”代替静态类 应用程序开始和应用程序结束方法是特殊方法 不代表HttpApplication事件的。ASP.NET只调用它们一次 针对应用程序域的生命周期,而不是针对每个应用程序域 HttpApplication实例
另一个选项是覆盖或。如果您决定覆盖Dispose(),请不要忘记调用基类Dispose()方法。也许您可以使用Global.asax文件中的应用程序生命周期,但您无法控制
static
构造函数。。。我认为,如果你解释一下你想要实现什么,以及你想发布/取消初始化什么,你可能会得到更好的帮助。这个问题可能是@HoomanBahreini需要在应用程序启动和应用程序完成时调用本机函数,换句话说,在创建进程和退出进程时。我还发现了ProcessExit函数,所以哪一个更准确?@user960567:肯定DomainUnload
。与DomainUnload
不同,ProcessExit
事件是定时的!表示CLR允许每个appdomain在终止前2秒运行ProcessExit
处理程序application@user960567:对!但重点仍然存在ProcessExit
是定时的,不能保证在应用程序终止之前完成!(答案已更新,以涵盖您指出的问题。不是最好的,但至少有效)