【问题标题】:How to make a function call every few seconds in c#?如何在 C# 中每隔几秒调用一次函数?
【发布时间】:2016-12-30 09:05:09
【问题描述】:

我正在使用 asp.net 中的 highcharts 构建仪表板。现在,我有了使用 Javascript 和 Ajax 的客户端。后端使用 C# 完成。我被要求每隔“x”分钟自动更新各个银行的数据。现在,我需要每隔几分钟调用一个函数来完成所有后端工作。然后数据将存储在一个容器中,比如一个数组,并发送到 Javascript 中,该 Javascript 完成所有的显示和工作。

我不知道如何让函数每隔几分钟重复调用一次,因为数据将在 C# 代码中更新,新数据将传递给 Javascript(顺便说一下,每隔几分钟也会刷新一次) )。

【问题讨论】:

标签: javascript c# jquery asp.net highcharts


【解决方案1】:

setInterval 函数中编写您的 JS 方法/AJAX 调用并分配一些时间间隔。 例如下面的代码将每 3 秒(3000 毫秒)提醒一次“Hello”:

setInterval(function(){ alert("Hello"); }, 3000);

从此处调用您的 C# 方法 (API) 的类似方式将始终返回最新的数据集。

【讨论】:

  • :- 感谢您的回复。因为,我后面的代码在一个 for 循环中,所以我需要暂停 for 循环中的计算一段特定的时间,只有当当前数据传递给 JS 方法时才重新开始计算。我该怎么办?
  • 好的。不要使用 for 循环并使用静态/全局变量 k 作为索引,它将跟踪 sc.transactionstats(country[k], bankid[k]);方法。每次调用此方法时都会增加 k++ 并使用该索引来检索值。
  • :- 非常感谢。
【解决方案2】:

页面加载事件只会调用该函数一次。您需要在 C# 中创建一个 WebMethod。

[WebMethod]
public void calctranscs() {
     for (int i = 1; i < bankid.Length; i++) {
         sc.transactionstats(country[i], bankid[i]);
         merchant_name = sc.MerchantName;
         success_transcs = sc.noofsuccessfultranscs;
         failed_transcs = sc.nooffailedtranscs;
         service_transcs = sc.nooffailedservicetranscs;
         count++;
    }
}

现在你从 JavaScript(或者最好是 jQuery)调用这个函数。

function CallCalctranscs() {     
         $.ajax({
         type: "GET",
         url: '<youraspxpage>.aspx/calctranscs',
         data: "",
         contentType: "application/json; charset=utf-8",
         dataType: "json",
         success: function (msg) {
            alert("success");
        },
        error: function (e) {
            alert("failure");
        }
    });
}

反复调用上述函数。

setInterval(CallCalctranscs, 100);

【讨论】:

  • :- 感谢您的帮助。虽然我对一件事有点困惑。因为,calctranscs 有一个 for 循环,它调用执行计算的实际方法。我需要能够以这样一种方式发送数据,即只有在将前一个数据发送到 JS 时,for 循环计算才会进行到下一个索引。我该怎么做?
  • 为此,您需要读取 AJAX 的响应,然后在成功响应时增加 for 循环中的计数(上面的 AJAX 函数已经具有成功/失败属性)。另外,我想建议您使用 ASP.Net SignalR asp.net/signalr 的更好方法。
  • :- 非常感谢。
  • :- 只是为了清楚。如何将 Ajax 响应返回到我的 aspx.cs 类?我是否将状态发送回服务器并将结果从服务器获取到我的 cs 类?
  • 每次 AJAX 调用,C# 代码中的 for 循环都会重置。每次成功通话都将是一次新的通话。这样,您将获得从 setInterval() 触发的每个调用的成功/失败响应。由于您在 C# 中的 calctranscs() 函数是无效的,因此您将不会获得任何数据。但无论如何,你所看到的成功和失败块每次都会被击中。
【解决方案3】:

在c#中使用webmethod返回json并使用setInterval函数在给定时间内调用GetGraphData()函数。
示例javascript -

function GetGraphData() {
    //ajax call here, call c# webmethod using ajax 
    //and decode json string using JSON.parse()

    // call this function again in 1000ms
    setInterval(GetGraphData, 1000);
}

//add Get graph data in page load 
$(function () {
    //first call
    GetGraphData();
});

样本WebMethod -

[WebMethod]
public static string calctranscs()
{
    string strJson="";

    //here create json string with your logic

    retutn strJson;
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-01-13
    • 1970-01-01
    • 2018-09-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-28
    相关资源
    最近更新 更多