我的主页中有一个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服务)来执行正在进行的后台任务。