2012-07-28 32 views
2

我正在通過從不同服務器獲取數據來顯示系統當前狀態的頁面。asp.net多線程頁面

在我的頁面上,我有五個不同的標籤和一個按鈕。我想要一次點擊按鈕,五個不同的線程從服務器獲取數據並更新相應的標籤值。我已經用下面的代碼

protected void Page_Load(object sender, EventArgs e) 
    { 
     Thread t = new Thread(updateLbl); 
     t.Start(); 
    } 


    protected void btnUpdateStatus_Click(object sender, EventArgs e) 
    { 
     Thread[] arrThread = new Thread[5]; 
     for (int i = 0; i < arrThread.Length; i++) 
     { 

      arrThread[i] = new Thread(new ParameterizedThreadStart(Update)); 
      arrThread[i].Name = "Thread" + (i + 1).ToString(); 

      arrThread[i].Start(
       new Parameters() 
        { 
         id = i + 1, 
         label = this.Master.FindControl("MainContent").FindControl ("Label" + (i + 1).ToString()) as Label 
        } as object); 
     } 
    } 
    public void Update(object o) 
    { 
     Parameters p = o as Parameters; 
     if (p != null && p.label != null) 
     { 
      p.label.Text = GetSystemState(p.id); 
     } 
    } 
    class Parameters 
    { 
     public int id { get; set; } 
     public Label label { get; set; } 
    } 

它確實更新標籤,但頁面上的值繼續加載,直到從服務器中的所有值都收回,然後在頁面上一次顯示他們測試應用程序。

我想要一些東西,如果一個線程檢索到它的數據,它的相應標籤必須更新,並且客戶可以使用其他進程是否檢索到他們的數據,並且他們必須在檢索到數據後立即更新。

+0

但是,這不是ASP.NET的本質頁面生命週期。過程和完成HTML後的代碼已發佈。使用HTML5我認爲你可以更新個別元素,但我不知道如何。 – Paparazzi 2012-07-28 20:52:20

+0

是不是有什麼辦法,我可以使用ajax或頁面方法獲得頁面上的每個控件的部分更新 – 2012-07-28 20:54:33

回答