如何以5秒延迟重复调用一个函数? (带C#的ASP.NET)

时间:2011-09-15 09:42:57

标签: c# asp.net

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

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

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

3 个答案:

答案 0 :(得分:3)

查看您的评论我看到您实际构建了一个聊天工具,这对于每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中,如:< / p>

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

有关此内容的详情,请参阅jQuery.load

答案 1 :(得分:2)

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

你需要包含jQuery javascript框架才能工作。

Clientside 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对象属性的名称完全匹配。

答案 2 :(得分:1)

通过编辑,构建聊天应用程序不仅需要每5秒运行一次重复任务的页面。

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

更谨慎的聊天会使用在许多技术中创建的独特HTTP服务器,您可能会根据socket.io查看node等新兴技术。