c#定时器的帮助

本文关键字:帮助 定时器 | 更新日期: 2023-09-27 18:05:40

我在c#中有这个定时器:

public class HomeController : Controller
{
    public int count = 0;
    public ActionResult Index()
    {
        Timer timer = new Timer();
        timer.Interval = 1000;
        timer.Elapsed += new ElapsedEventHandler(onTimer);
        timer.Start();
        return View();
    }
    public void onTimer(Object source, ElapsedEventArgs e)
    {
        count++;
    }  
    [HttpPost]
    public JsonResult CheckStatus()
    {
        return Json(count);
    }

,这是我的观点:

<script type="text/javascript">
$(function () {
    // poll every 5 seconds
    setInterval('checkStatus()', 3000);
});
function checkStatus() {
    $.ajax({
        url: 'Home/CheckStatus',
        type: 'POST',
        dataType: 'json',
        success: function (xhr_data) {
            document.getElementById("test").innerText = xhr_data;
        }
    });
}

为什么它一直显示我(运行时)只有0 ?为什么它不显示0、1、2等等?div ?

每次发出请求时都会创建一个新的控制器实例。因此,重复的AJAX调用只得到0,因为count值初始化为0。

可能会有其他控制器(运行计时器)在周围浮动,直到GC运行来收集它们,但它们对实际处理每个单独请求的新控制器没有影响。

我不知道你想用这个代码解决什么问题,但是你调查了setTimeoutsetInterval javascript方法吗?它们提供客户端定时器服务,可能非常适合您的任务。

如果需要持久的服务器端数据,那么有许多选项,包括:

    会话状态
  • 应用程序状态
  • 视图状态
  • 缓存

c#定时器的帮助

这取决于你想要解决的实际问题。

因为您的计时器将无法在页面生命周期中存活,假设这是ASP.NET。每次回发发生时,都会给出一个新的实例。

我不确定如何让计时器工作,但要让东西在回调中持久化,你可以使用viewstate, Session或Cache。

是不是每次发出请求时都实例化了控制器,所以每次发出请求时该值将为零?

如果需要全局计数器,请使用Application或静态字段。