簡體   English   中英

在C#中,類如何以在ASP.Net和非Web應用程序下均可工作的方式完成其自己的應用程序終結處理?

[英]In C#, how can a class do its own application-end finalization in a way that works under both ASP.Net and non-web applications?

我有一個在ASP.Net和非Web應用程序中使用的庫類,它們需要對應用程序結束進行終結處理。

在我的項目的庫中,我希望類進行自己的應用程序終結處理,而無需開發人員添加對Global.Application_End或AppDomain.CurrentDomain.ProcessExit的調用。

如何才能做到這一點?

其他背景/理由:

即使我考慮這些選項,當ASP .Net應用程序在IIS中停止時,AppDomain.CurrentDomain.ProcessExit似乎也沒有被調用。 並且Global.Application_End特定於ASP .Net。 因此,這兩種選擇都不兼容。

如果有一個為什么可能需要這樣做的特定示例有幫助...在這種特殊情況下,它使用SqlDependency,據我所知,它需要調用SqlDependency.Start進行初始化,並需要在應用之前調用SqlDependency.Stop。終止。

(請參閱http://msdn.microsoft.com/en-us/library/ms172133.aspx

看來,此SO答案https://stackoverflow.com/a/256278/449837中描述的模擬靜態fianalizer在Web和非Web應用程序中均可使用。

這是我正在工作的示例:

public class ClassThatNeedsStaticFinalizer {

    // ... other class properties, methods, etc ...     

    #region Static Finalizer Emulation

    static readonly Finalizer finalizer = new Finalizer();
    private sealed class Finalizer
    {
        ~Finalizer()
        {
             //  ... Do final stuff here ...
        }
    }

    #endregion
}

(注意:對於某些代碼便簽本環境,例如LinqPad,在便簽本應用程序本身關閉之前,〜Finalizer可能不會觸發)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM