簡體   English   中英

幫助 c# 定時器

[英]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。

我不知道您要使用此代碼解決什么問題,但是您是否研究過setTimeoutsetInterval javascript 方法? 它們提供客戶端計時器服務,並且可能非常適合您的任務。

如果您需要持久的服務器端數據,那么有很多選項,包括:

哪個(如果有)適合您,取決於您要解決的實際問題。

因為您的計時器將無法在頁面生命周期中存活,假設這是 ASP.NET。 每次回發時,都會給出一個新的實例。

我不知道如何讓計時器工作,但要讓東西在回調中持久存在,你可以使用 View State、Session 或緩存之類的東西。

controller 不是每次發出請求時都會實例化,所以每次發出請求時值都會為零?

如果您想要一個全局計數器,請使用 Application 或 static 字段。 如果您希望它按用戶計數,請使用 session。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM