调用应用程序范围(.Net)中的方法



我的主页中有一个UserControl(uc),uc内部有一个进行一些计算的方法(MyMethod)。

protected void Page_Load()
{
 If(!IsPostBack)
  MyMethod();
}
private void MyMethod()
{    
  SomeCalculations..
}

因为我的uc在母版页中,所以我可以在所有的aspx页面中看到uc。我的目标是,一旦用户登录应用程序,只运行一次MyMethod()(在线程中),并在无限循环中进行计算,直到用户注销或应用程序(或浏览器)关闭。尽管计算在PostBack之外,但MyMethod将被调用多次。

假设我在Page-1中,并且它是第一次加载的,MyMethod()将被双向调用。在加载另一个页面(page-2)后,MyMethod将被再次调用,我想阻止它。有没有这样的方法:

if(LifeCycle of application resumes)
{
  MyMethod()
}

您可以将标志存储在应用程序状态中,并在条件中使用它。也许是这样的:

// in Application_Start in Global.asax
Application["IsRunning"] = false;

然后:

private void MyMethod()
{
    if (!((bool)Application["IsRunning"]))
    {
        Application["IsRunning"] = true;
        // your code
    }
}

请注意,web应用程序的状态并不总是稳定或直观的。它实际上是一个请求/响应系统,由web服务器管理资源。此可能不如您预期的那么可靠。

您可能需要考虑使用一个单独的应用程序(如Windows服务)来执行正在进行的后台任务。

最新更新