【问题标题】:How to Delay Calling a function After full page loaded on aspx with c#如何在使用 c# 在 aspx 上加载整页后延迟调用函数
【发布时间】:2018-11-05 06:58:39
【问题描述】:

下面是我的简单源代码,我只是想在页面加载后调用该函数,但现在发生的是:它在页面加载之前调用该函数。页面加载 5 秒,然后显示标签执行。

protected void Page_Load(object sender, EventArgs e)
{
   display();
}

void display()
{
    Thread.Sleep(5000);
    Label3.Text = "done";
}

【问题讨论】:

  • 也许可以试试Timer
  • 这是网络表单吗?
  • 是的,它是带有 c# 的 webform .aspx 页面
  • 我同意@oerkelens 的Timer 回答 - 请先阅读:robertgreiner.com/2010/06/using-stopwatches-and-timers-in-net
  • 您在服务器端执行的任何代码都将在页面显示在浏览器中之前运行。这就是页面生命周期的工作方式。您将需要寻找另一种方法:例如计时器或 ajax 调用。

标签: c# asp.net webforms page-lifecycle


【解决方案1】:

您应该阅读this document 关于 ASP.NET 页面生命周期的信息。它实际上表明您正在尝试做的事情是不可能的。

您在服务器端编写的每个代码都将在浏览器呈现页面之前运行。这意味着在浏览器呈现页面后你不能调用函数,除非你使用其他方法。

实现此目的的最简单方法是使用 Javascript 和 Ajax 调用 或使用Timer,它会打开一个不同于主执行线程的新线程。虽然,我不建议打开新线程,因为您将失去对执行流程的控制,并且在网页中您可能会拥有数百个打开的线程。

【讨论】:

  • 不要使用Timer。你怎么知道页面要加载多长时间?你没有。它是高度可变的,并且会因用户而异。
  • 我认为对于 OP 来说,它是 4.9 秒还是 5.1 秒都没有关系。无论如何,我实际上建议不要在我的回答中使用计时器。只是指出这是一种实现方式,但不是更好的方式,对我来说显然是“Ajax”方式。
【解决方案2】:

下面的代码正在运行

protected  void Page_Load(object sender, EventArgs e)
{
    Timer1.Interval = 2000;
    Timer1.Enabled = true;
}
protected void Timer1_Tick(object sender, EventArgs e)
{
        Label3.Text = "done";
}

【讨论】:

  • 您原来的 Thread.Sleep 不起作用,因为您在 page_load 结束之前使用它。开始页面加载->开始显示->等待->结束显示->结束页面加载。全部在一个线程中,因此 page_load 不会在您完成其他所有操作之前结束。如果您通过调试单步执行代码,您可以轻松看到这一点。
  • 你确定你为asp.net测试过这个,而不是桌面应用程序?我看不出这是如何工作的,因为在计时器执行时页面已经被渲染并发送到客户端。
  • 这不会做 OP 想要的。您正在延迟服务器端代码的完成,但这对浏览器呈现页面的客户端没有影响。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-09-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多