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运行来收集它们,但它们对实际处理每个单独请求的新控制器没有影响。
我不知道你想用这个代码解决什么问题,但是你调查了setTimeout
和setInterval
javascript方法吗?它们提供客户端定时器服务,可能非常适合您的任务。
如果需要持久的服务器端数据,那么有许多选项,包括:
- 会话状态应用程序状态
- 视图状态 缓存
因为您的计时器将无法在页面生命周期中存活,假设这是ASP.NET。每次回发发生时,都会给出一个新的实例。
我不确定如何让计时器工作,但要让东西在回调中持久化,你可以使用viewstate, Session或Cache。
是不是每次发出请求时都实例化了控制器,所以每次发出请求时该值将为零?
如果需要全局计数器,请使用Application或静态字段。