【问题标题】:How to call a function repeatedly with 5 seconds delay? (ASP.NET with C#)如何以 5 秒的延迟重复调用函数? (带有 C# 的 ASP.NET)
【发布时间】:2011-09-15 09:42:56
【问题描述】:

我在 Default.aspx.cs 文件中有一段代码,它写在 Page_Load 函数中,如下所示:

protected void Page_Load(object sender, EventArgs e)
{
    //code stars here
    ...
    //code ends here   
}

我想要的是这段代码将持续运行,延迟 5 秒。我怎么能在这里做到这一点? 谢谢。

【问题讨论】:

  • 处理 ASP.NET 请求后,所有与其相关的对象都会被释放。您的页面对象不再存在,无法使其每 X 秒连续运行一个任务。编写只会减慢请求处理速度的代码是没有意义的……它们应该尽快发生。
  • 实际上我正在使用聊天系统,所以我需要每 5 秒检查一次是否有任何传入消息,我需要这样做。请给我建议一种方法(例如任何计时功能或其他...),我将感谢您的帮助。
  • 您不需要在一个请求中使此代码在服务器上每 5 秒运行一次。您需要每 5 秒向客户端请求一次此代码。
  • 好的,我该怎么做?请您提供示例代码以每 5 秒从客户端请求此代码吗?

标签: c# asp.net


【解决方案1】:

查看您的 cmets,我发现您实际上正在构建一个聊天工具,这对于每 5 秒的连续请求更有意义。

我建议使用 ASP.NET Web 方法和 AJAX 技术来实现这一点。

使用jQuery.ajax,您可以在javascript中每5秒发出一次请求以返回新的聊天消息

对于您的 javascript/jquery,以下内容将是一个好的开始:

setInterval(function () {
                    $.ajax({
                        url: "/Chat.asmx"
                            , type: "POST"
                            , contentType: 'application/json; charset=utf-8'
                            , data: '{ ConversationID: "' + ConversationID + '"}'
                            , dataType: 'json'
                            , success: function (data) {

                                //do something with data

                            }
                    });
                }, 5000);

Chat.asmx 将成为您的 Web 方法。查看 ASP.NET Web 方法以获取更多信息:

http://encosia.com/using-jquery-to-directly-call-aspnet-ajax-page-methods/

一种更快但不推荐的方法是使用jQuery.load,您可以在独立的 .aspx 页面上的转发器中将聊天消息保存并继续将其加载到页面上的 div 中,例如:

setInterval(function () {
     $(".chatmessages").load("ChatConversation.aspx?id=" + ConversationID);
}, 5000);

更多信息请见jQuery.load

【讨论】:

  • 感谢您的回复。如果您可以在上述上下文中分享一些简单的代码,我将不胜感激。
【解决方案2】:

正如其他人建议的那样,使用 ajax 并每 5 秒从客户端获取数据。 这是一个小示例,可以帮助您入门。

您需要包含 jQuery javascript 框架才能使其工作。

客户端javascript:

// execute this on dom ready
$(document).ready(function () {    
    // call function getData every 5 seconds:
    setInterval("getData()", 5000);
});

// Call an asp PageMethod via an ajax call
function getData() {
    $.ajax({
      type: "POST",
      async: true,
      contentType: "application/json; charset=utf-8",
      url: "YourPage.aspx/GetData",
      // optional post some data 
      // data: JSON.stringify(data),          
      success: dataReceived
    });         
}

// callback function is called, when data is recevied
function dataReceived(data, textStatus, jqXHR) {
    // your data is in data.d

}

在服务器端,您必须在您的 aspx 页面中编写一个“页面方法”,这是一个您可以通过 ajax javascript 调用调用的静态方法:

public class YourPage : Page
{

    [WebMethod]
    public static object GetData() {
        // return your data here
        return new {Data1 = ..., Data2 = ...};
    }
}

您可以通过参数将数据传递给您的页面方法。参数的名称必须与传递给 $.ajax 的 json 对象属性的名称完全匹配。

【讨论】:

    【解决方案3】:

    根据您的编辑,构建聊天应用程序需要的不仅仅是每 5 秒运行重复任务的页面。

    对于简单的聊天,您可以使用 AJAX 和 Javascript 中的 setInterval() 方法实现此目的,但这样做可能会将所有线程与 HTTP 服务器(如 Apache)捆绑在一起。

    更谨慎的聊天将使用在许多技术中创建的独特 HTTP 服务器,您可以研究基于 node 的新兴技术,例如 socket.io

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-08-19
      • 1970-01-01
      • 2022-01-18
      • 2016-03-22
      • 1970-01-01
      • 2019-03-05
      相关资源
      最近更新 更多