2010-12-02 51 views
0

Hy,使用C#,我如何更新另一個類的列表框項目?

在我的項目asp.net(c#)中,我使用線程來處理一些消息。我有一個顯示頁面,其中包含一個列表框,其中包含處理消息時採取的所有操作。還有一個我正在處理信息的課程。

的Default.aspx:

 protected void Page_Load(object sender, EventArgs e) 
     { 
      //starts the thread and call the method from Process.cs 
     } 

     public void SetListItem(string text) 
     { 
      myListBox.Items.Add(text); 
      myListBox.DataBind(); 
     } 

Process.cs

public class Process 
{ 
    public Process() 
    { 
    Default defaultPage; 
    defaultPage.SetListItem("==> Received message!"); 
    } 
} 

但列表框不顯示什麼。 有沒有人有我的錯在哪裏ideea? 謝謝。

傑夫

回答

2

刪除數據綁定

myListBox.DataBind(); 

你不需要它,因爲你將項目添加到列表集合。如果您正在設置數據源屬性,則必須使用它。這完全取決於你的更新在生命週期中的哪個部分。這可能是你的更新被代碼中的其他地方的代碼所取代。

事實上,我會把這當成一個單獨的線程。由於您需要在頁面向瀏覽器提交信息之前更新它,因此您需要將其保留在同一個線程中以確保它完成,否則您需要在結束時進行某種檢查您的頁面正在執行過程以確保它已完成。您的線程可能在頁面處理完成後完成。

+0

不,這是不好的..我的列表框仍然不顯示任何東西 – 2010-12-02 15:04:40

0

一個asp.net頁面,如Default會生成html,並返回給請求的瀏覽器。當這個html已經生成併發送到瀏覽器時,你無法在服務器端添加項目到瀏覽器中顯示的任何內容。

因此,產卵線程做一些工作對於當前的情況來說不是一個好主意。

+0

這聽起來對我來說,我必須使用一些腳本,如ajax,我的服務器數據到客戶端 – 2010-12-02 15:17:37

0

克勞斯是對的。一旦頁面被繪製出來,它就坐在那裏。

因此,要做你想做的事情,在一個單獨的線程中運行Process: 在Process中將輸出消息寫入數據存儲區,即使這只是附加到文本文件。然後,將頁面設置爲每X次自動刷新一次,並在加載時使用該數據存儲區的內容重新填充您的列表框。

之後,當一切正常時,您可以使用Ajax來刷新列表框,而不是整個頁面。

相關問題