2010-03-09 41 views
2

好喜歡做什麼ID是加載,顯示90%的內容的頁面,並異步加載最後10%。添加內容異步(線程+ AJAX)

作爲即時呈現頁面編程方式創建我傳遞給一個線程更新面板。當這個線程完成它時,然後更新主線程上的updatepanel。

public void test(object parameter) 
{ 
    Thread.Sleep(2000); 
    var updpanel = (UpdatePanel)parameter; 
    updpanel.ContentTemplateContainer.Controls.Add(new LiteralControl("HI")); 
    updpanel.Update(); 
} 
protected void Page_Load(object sender, EventArgs e) 
{ 
    var th = new Thread(new ParameterizedThreadStart(test)); 
    var updpanel = new UpdatePanel() { UpdateMode = UpdatePanelUpdateMode.Conditional }; 
    ContentPlaceHolder1.Controls.Add(updpanel); 
    th.Start(updpanel); 
} 

失敗了,在單線程的方法,我只是不斷輪詢頁面,看看它是否已完成?

回答

1

你不能在服務器上以這種方式使用線程。您的第二個線程可能會在處理頁面並且請求生命週期完成後才能完成。

取決於你想要達到的目的:你需要並行處理服務器端你應該看看Asynchronous Pages in ASP.Net 2.0數據。

另一種方法是渲染頁面(「90%」,你稱呼它),並使用AJAX客戶端請求額外的數據。

2

有一點要記住的是,即使ASP.Net開發好像它密切相關的窗口發展,有一個很大的區別:你的代碼來處理請求,大部分時間,在一小部分被執行一秒鐘完成...在這個例子中,一旦主線程完成,生成的頁面已經發送到請求者,讓輔助線程在服務器的後臺運行,在已經發送的頁面上工作出。

什麼你可能需要做的是產生90%的頁面,然後把它發送出去。在你的頁面上,你將需要使用ajax,在頁面加載時(對於客戶端),從服務器請求另外10%的數據......你可能想要用像jquery這樣的庫來完成javascript,服務器端設置一個Web服務來處理請求。