2011-11-04 61 views
0

我希望服務器在網頁上顯示一些文本。爲什麼label.Text在服務器中設置,但不會在網頁上更改?

我定義

<asp:Label id="label1" runat="server" /> 

,並設置

protected void Button1_Click(object sender, EventArgs e) 
    { 
     label1.Text = "bla"; 
     timer = new System.Threading.Timer(new TimerCallback(DoSomething), null, 0, 10000);   
    } 

    private void DoSomething(object obj) 
    { 
     label1.Text = "bla 1"; 
    } 

BLA呈現,但不BLA1。 當我調試時,我看到「bla 1」行被執行。 我在哪裏做錯了?

回答

3

當DoSomething()被執行時,響應已經被髮送到瀏覽器,並且你的代碼什麼都不做。其實,我很驚訝你不會使應用程序域崩潰。

您不應該嘗試在asp.net應用程序中使用像這樣的線程原語。

如果您希望某個時間比初始頁面顯示更晚更新值,則需要查看Ajax。

+0

那麼,這個怎麼解決? Thread.CurrentThread.Join(); –

+0

嗯......不,你用客戶端「解決」它,並有額外的Ajax請求。 *不要嘗試在這樣的asp.net應用程序中執行線程*小狗和小貓會哭泣。 –

0

我會認爲新的計時器在頁面響應發送之前沒有完成。該線程可能會拋出一個錯誤,然後關閉。

0

您不能異步更改另一個線程中的標籤,一旦將響應發送回瀏覽器,則您在服務器上做的任何操作都不會產生任何影響。你將需要使用JavaScript做客戶端ujpdates。

0

ASP.Net在服務器上運行代碼並將結果返回給瀏覽器,一旦完成,服務器上發生的任何事情都將對瀏覽器中的html產生任何影響。

0

原因是當您單擊按鈕發生請求/響應過程時。 您的線程不以任何方式刷新頁面或其片段。

可能你可以通過websockets或ajax long pooling實現所需的結果 - 與彗星。

相關問題