繁体   English   中英

从global.asax调用aspx.cs页面中的函数

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM