VS C#ASP> NET中的秒计数器

时间:2015-03-15 22:46:44

标签: asp.net

我正在尝试设计一个简单的计数器,它只显示Label控件中的秒数。也就是说,只需从0到59重复DateTime.Now.Seconds,然后重复直到应用程序关闭。

我已经阅读了其他一些解决方案,并且能够使用AJAX使其工作,但我的问题是为什么我的以下代码不起作用?

代码将显示标签中的当前秒,但仅显示一次。每个" Tick"都不会重复。我已尝试在各个地方进行while(true)循环,但代码永远不会完成(只是进入无限循环)。

我知道有使用JavaScript(和其他)的解决方案,但我希望看到此代码可行,如果可能的话,没有任何外部脚本。 感谢。

using System.Timers;

namespace WebApplication2
{
    public partial class _default : System.Web.UI.Page
    {
        private static System.Timers.Timer aTimer;

        protected void Page_Load(object sender, EventArgs e)
        {
            // set the Timer to pass event "Elapsed" every 1 second
                aTimer = new System.Timers.Timer(1000);
            // wire the Event to the EventHandler
                aTimer.Elapsed += OnTimedEvent;
            // set the Timer to repeat automatically
                aTimer.Enabled = true;

            // display the output of the doCount method in the text box    
            timeLabel.Text = doCount().ToString();

        }

        // when the Event fires, call the doCount method
        private static void OnTimedEvent(Object source, ElapsedEventArgs e)
        {            
                doCount();
        }

        // Each time the doCount method is called, read the current time and output the "Second"
        // back to the timeLabel.Text call.
        public static int doCount()
        {
            int beat = DateTime.Now.Second;
            return beat;
        }  

    }
}

3 个答案:

答案 0 :(得分:1)

您可以使用AJAX,因为AJAX能够在初始响应发送到客户端后与服务器通信。常规Web窗体周期如下所示:

  1. 浏览器向服务器发送请求

  2. 服务器收到请求

  3. 服务器处理请求并生成响应

  4. 服务器向客户端发送响应。

  5. 在步骤#4之后,除非客户端专门发出新请求(基本上是AJAX的定义),否则不能再从服务器向客户端发送内容。

    有很多方法可以解决这个问题。一个是AJAX。其他的是永久帧,服务器发送事件和Web套接字(可能还有一些其他模糊不清的东西)。有了这些,您可以将其视为客户端启动与服务器的连接然后保持打开状态,以便服务器可以连续向客户端发送数据。

    这样做的一个后果是它会迫使您思考服务器真正需要做什么。客户端可以完成很多,绝对可以处理简单的计时器并更新标签中的文本而不涉及服务器。当您编写Web应用程序时,您应该尽可能多地在客户端上执行此操作。您只有一台具有有限资源的Web服务器,但如果您充分利用连接到站点的每个客户端的资源,则可以更好地扩展。服务器为客户端生成初始HTML,并且需要数据库访问和访问各种其他API。但如果您可以在不使用服务器的情况下在客户端上执行操作(UI操作),那就去吧!

答案 1 :(得分:0)

这将永远不会有效,因为只要请求得到处理,服务器就会创建一个新的页面实例,处理它并立即发送给客户端。一旦发送输出就无法操作输出,这就是为什么你必须使用javascript来完成这样的任务。

您应该了解有关Web开发的更多信息,因为与开发桌面应用程序相比,它确实有所不同。因此,学习MVC而不是Webforms可能是一个更好的主意,因此您可以更清楚地了解正在发生的事情。在Webforms中,这可能会使像你这样的人感到困惑,因为它看起来几乎和你开发Windows应用程序一样,但这只是一种错觉。

答案 2 :(得分:0)

您的代码误解了ASP.NET网页的工作原理。你应该读这个:https://msdn.microsoft.com/en-us/library/ms178472%28v=vs.85%29.aspx

有效地,服务器呈现页面并将其提供给客户端(浏览器)。之后它只响应从客户端发起的事件。