我們可以使用名稱Application_End()從global.asax文件創建方法附加到此事件。但我需要像這樣附加如何處理來自外部的Application_End事件global.asax
HttpContext.ApplicationInstance.ApplicationEnd+=OnApplicationEnd;
有沒有辦法做到這一點?
我們可以使用名稱Application_End()從global.asax文件創建方法附加到此事件。但我需要像這樣附加如何處理來自外部的Application_End事件global.asax
HttpContext.ApplicationInstance.ApplicationEnd+=OnApplicationEnd;
有沒有辦法做到這一點?
有這樣解決了問題。
public class MyHttpApplication:HttpApplication
{
public event Action ApplicationEnd;
protected void Application_End()
{
if (ApplicationEnd != null)
ApplicationEnd();
}
}
在Global.asax中的代碼定義
<%@ Application Inherits="MyLib.MyHttpApplication" Language="C#" %>
然後
var app = HttpContext.ApplicationInstance as MyHttpApplication;
app.ApplicationEnd +=() => { // do something };
Application_End是一個特殊的「事件」,由Asp.net調用,不會記錄到HttpApplication類。
來自MSDN * Application_Start和Application_End方法是不代表HttpApplication事件的特殊方法。 ASP.NET稱他們一旦應用程序域的生命週期,而不是每一個HttpApplication實例。*
我認爲你可以有相同的行爲,並連接到處理器的AppDomain.DomainUnload事件
//your global.asax class contrauctor
public GlobalApplication()
{
AppDomain.CurrentDomain.DomainUnload += ApplicationEnd;
}
private void ApplicationEnd(object sender, EventArgs e)
{
}
已經試過。您只能從其他AppDomain處理DomainUnload事件,而不是從激發它的域中處理DomainUnload事件,因爲它在卸載整個域數據後觸發,並且不會調用事件處理程序。 – mironych 2011-05-24 14:16:37
我測試過了,它工作正常。 在處理程序處添加一個斷點 運行網站 在web配置中添加一個空白區域並保存它以強制卸載它將被調用的appdomain – 2011-05-24 14:37:58
我知道答案已經給出,但想也包括這樣:
[assembly: PreApplicationStartMethod(typeof(Bootstraper), "Start")]
[assembly: ApplicationShutdownMethod(typeof(Bootstraper), "End")]
public static class Bootstraper
{
public static void End()
{
...
}
public static void Start()
{
...
}
}
我在[MSDN](http:// msd)中看不到ApplicationEnd事件n.microsoft.com/en-us/library/system.web.httpapplication.aspx)。 – Amy 2011-05-24 14:03:10
你想從外部global.asax處理Application_End事件嗎? – 2011-05-24 14:11:24