[英]Call function in aspx.cs page from global.asax
我在inglobal.asax页面中获得了代码:
void Application_Start(object sender, EventArgs e)
{
// Code that runs on application startup
System.Timers.Timer timScheduledTask = new System.Timers.Timer();
// Timer interval is set in miliseconds,
// In this case, we'll run a task every minute
timScheduledTask.Interval = 60 * 1000;
timScheduledTask.Enabled = true;
// Add handler for Elapsed event
timScheduledTask.Elapsed += new System.Timers.ElapsedEventHandler(timScheduledTask_Elapsed);
}
void timScheduledTask_Elapsed(object sender, System.Timers.ElapsedEventArgs e)
{
// Over here i want to call function that i have in asp.net page
}
我的问题是在timScheduledTask_Elapsed
函数中,我想调用在asp.net页(Contacts.aspx.cs)中具有的函数。
任何想法如何调用此函数?
它必须是页面的静态方法,因为应用程序类无法知道当前页面实例。
下面可以看到一个粗略的示例。
somepage.aspx:
public class SomePage : Page
{
public static void DoSomething()
{
...
}
}
global.asax:
void Application_Start(object sender, EventArgs e)
{
...
// Add handler for Elapsed event
timScheduledTask.Elapsed += new System.Timers.ElapsedEventHandler(timScheduledTask_Elapsed);
}
void timScheduledTask_Elapsed(object sender, System.Timers.ElapsedEventArgs e)
{
SomePage.DoSomething();
}
但是,这确实意味着DoSomething()
任何内容都不得依赖页面中特定的任何实例。
我会重新考虑您的方法。
还要注意,在恕我直言,计时器是个坏主意,如果应用程序卸载您的计时器,则永远不会调用它,因此您不能真正依赖它们。
如果您需要从外部调用PAGE方法,则设计会很糟糕。 在执行其他任何操作之前,我建议您进行一些研究,以将代码分成多个层次,这样就永远不会发生这种情况。
但是,如果您仍然坚持要按自己的方式进行操作(无论如何,您迟早都会了解),最简单的解决方案是将请求的页面方法设为静态。 这样,您可以随时调用它,而无需引用实际实例。
我会将代码制作成非可视类,然后调用它。
如果需要使其可视化,请使其成为可视化的用户控件,并将其包含在您使用的母版页上。
我同意,当不在页面运行时尝试在其他页面上调用某个东西只是在问问题。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.