C# 从global.asax调用aspx.cs页面中的函数
我得到了inglobal.asax页面的代码:C# 从global.asax调用aspx.cs页面中的函数,c#,asp.net,C#,Asp.net,我得到了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 t
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\u函数中,我想调用asp.net页面(Contacts.aspx.cs)中的函数
你知道如何调用这个函数吗?如果你需要从外部调用一个页面方法,你的设计很糟糕。在做任何其他事情之前,我建议您研究一下如何将代码分为多个层,这样就不会出现这种情况
但是,如果您仍然坚持要按自己的方式执行(无论如何,您迟早会理解的),最简单的解决方案是将请求的页面方法设置为静态。这样,您可以随时调用它,而无需引用实际实例。如果您需要从外部调用PAGE方法,您的设计非常糟糕。在做任何其他事情之前,我建议您研究一下如何将代码分为多个层,这样就不会出现这种情况
但是,如果您仍然坚持要按自己的方式执行(无论如何,您迟早会理解的),最简单的解决方案是将请求的页面方法设置为静态。这样,您可以随时调用它,而无需引用实际实例。它需要是页面的静态方法,因为应用程序类无法知道当前页面实例
下面可以看到一个粗略的例子
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()
中的任何内容都不能依赖于页面中特定于实例的任何内容
我会重新考虑你的方法
另外请注意,计时器在这里不是一个好主意,如果应用程序进程卸载,那么您的计时器将永远不会被调用,因此您不能真正依赖它们。它需要是页面的静态方法,因为应用程序类无法知道当前页面实例
下面可以看到一个粗略的例子
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()
中的任何内容都不能依赖于页面中特定于实例的任何内容
我会重新考虑你的方法
另外请注意,计时器在这里不是一个好主意,如果应用程序进程卸载,您的计时器将永远不会被调用,因此您不能真正依赖它们。我会将代码制作成一个非可视类并调用它
如果您需要它是可视化的,请将其设置为可视化用户控件,并将其包含在您使用的母版页上
我同意,如果试图在另一个页面上调用某个不在运行的页面,那只会带来问题。我会将代码放入一个非可视类中并调用它
如果您需要它是可视化的,请将其设置为可视化用户控件,并将其包含在您使用的母版页上
我同意,尝试在非运行页面的情况下调用其他页面上的某个内容只是在问问题。谢谢您的帮助。您是否举例说明如何使用不带计时器的函数(每天一次)@就我个人而言,我会有一些东西,只要调用一个执行你所需任务的计划任务的URL即可。谢谢你的帮助。你能举例说明如何在没有计时器的情况下使用函数(每天一次)@MiaW就我而言,我会有一些东西,只要调用一个执行你所需任务的计划任务的URL即可。