[英]C# Timer - Need help disabling timer until code executes then restart timer. Currently maxing CPU :(
[英]help with c# timer
我在 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 等..?
每次您提出請求時,都會創建一個新的 controller 實例。 因此,您重復的 AJAX 調用只會得到 0,因為這就是count
數值的初始化值。
在 GC 運行以收集它們之前,可能會有其他控制器(運行計時器)漂浮,但它們不會影響實際處理每個單獨請求的新 controller。
我不知道您要使用此代碼解決什么問題,但是您是否研究過setTimeout
和setInterval
javascript 方法? 它們提供客戶端計時器服務,並且可能非常適合您的任務。
如果您需要持久的服務器端數據,那么有很多選項,包括:
哪個(如果有)適合您,取決於您要解決的實際問題。
因為您的計時器將無法在頁面生命周期中存活,假設這是 ASP.NET。 每次回發時,都會給出一個新的實例。
我不知道如何讓計時器工作,但要讓東西在回調中持久存在,你可以使用 View State、Session 或緩存之類的東西。
controller 不是每次發出請求時都會實例化,所以每次發出請求時值都會為零?
如果您想要一個全局計數器,請使用 Application 或 static 字段。 如果您希望它按用戶計數,請使用 session。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.