2011-09-15 24 views
1

我有一些片在Default.aspx.cs文件中的代碼它的Page_Load函數中這樣寫的:如何以5秒的延遲重複調用一個函數? (用C#ASP.NET)

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

什麼,我想的是,這段代碼將運行連續5秒延遲。我如何在這裏做到這一點? 謝謝。

+0

一旦你的ASP。NET請求已處理完所有與它相關的對象。您的頁面對象不再有效,無法每隔X秒連續執行一次任務。編寫一些只會減慢請求處理速度的東西是沒有意義的......它們應該儘可能快地發生。 –

+0

其實我正在聊天系統上工作,所以我需要每5秒鐘後檢查任何傳入消息,我需要這樣做。請給我一個方法來做到這一點(如任何定時功能或任何...) 我會感謝您的幫助。 – Azeem

+0

您不需要在一個請求中在服務器上每5秒運行一次此代碼。您需要每隔5秒從客戶端請求此代碼。 – StuperUser

回答

1

從您的編輯中,構建一個聊天應用程序需要的不僅僅是每5秒鐘運行一個重複任務的頁面。

對於簡單聊天,您可以在Javascript中使用AJAX和setInterval()方法來實現此目的,但這樣做可能會將所有線程與Apache服務器等HTTP服務器捆綁在一起。

更謹慎的聊天可以使用許多技術中創建的獨特的HTTP服務器,您可以根據node查看新興技術,如socket.io

3

看着你的評論我看到你實際上建立了一個聊天工具,這對於連續請求每5秒更有意義。

我會推薦使用ASP.NET Web方法和AJAX技術來實現這一點。

使用jQuery.ajax你可以提出一個要求,每5秒的JavaScript返回新的聊天消息

類似以下內容將是你的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查找有關此

+0

感謝您的回覆。如果你可以在上面的上下文中分享一些簡單的代碼,那麼我會欣賞它。 – Azeem

+0

請參閱我的編輯。 – Curt

2

更多信息作爲其他人認爲,使用Ajax和從clietn EV讓您的數據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對象屬性的名稱。