2014-06-05 71 views
0
for (i = 0; i < 10; i++) 
    { 
     len = (i*30).ToString(); 
     System.Threading.Thread.Sleep(200); 
     progressbar.Style.Add("width", len + "px"); 
     txtlbl.InnerHtml = len+'%'; 

     System.Threading.Thread.Sleep(200); 
     //htmlDivControl.Style["width"] =Convert.ToString("10"); 
       //Item("width") = i.ToString + "px" 
    } 

這是我在C#代碼背後的代碼。我已經在html中創建了一個div標籤。並嘗試使用睡眠方法定期增加寬度以創建進度條。 我只能在循環結束時看到進度條。 只想在寬度不斷增加的情況下逐步查看進度條。 這裏有什麼問題,請任何人幫助我。Thread.Sleep方法

+2

正如你所說,這是你的「後臺代碼」,它在服務器上執行。你正在尋找的是一個在客戶端上執行的JavaScript代碼。 – HABJAN

+1

ASP.NET是一種呈現html的服務器端技術,因此在頁面生命週期結束時,html將被髮送到客戶端。也許你可以使用一些jQuery插件。 –

回答

2

您將無法使用服務器端代碼來執行此操作。這將不得不做客戶端,最有可能在JavaScript。

將ASP.NET視爲構建發送到瀏覽器的大型字符串。當頁面經歷它的生命週期時,你所做的一切只是建立一個單一的字符串,最終發送到瀏覽器。因此,代碼在事件完成時離開頁面的任何狀態都是它將被傳遞給瀏覽器的狀態。這就是爲什麼你只能看到你的進度條的「最終」狀態。

這是一個jQuery進度條的鏈接,您應該可以使用它作爲起點。 http://jqueryui.com/progressbar/

1

您正試圖使用​​服務器端代碼來執行將在客戶端執行的操作。服務器端代碼將簡單地向客戶端(即瀏覽器)輸出靜態HTML,然後停止執行。您可以在呈現呈現之前操縱HTML;但在此之後,您需要使用Javascript(如果這是客戶端語言)執行此類頁面的交互式操作。

您的代碼基本上正在執行之前該頁面被提供給客戶端,因此您只能看到此操作的最終結果。

OnLoad事件(即在頁面加載到客戶端之後),您可以使用Javascript執行此C#代碼的變體以實現該效果。但是,將jQuery用於此操作會更簡單。

0

正如其他人所提到的,ASP技術在服務器上做了一些處理,並向客戶端發回HTML響應。所以你需要添加客戶端的Javascript代碼來改變用戶界面。

這裏有一種方法(使用JQuery),你可以嘗試搞亂(小提琴:http://jsfiddle.net/5arx/g8kF9/)。基本上它使用setInterval函數每x毫秒執行一些代碼。

<div class='expando' id='expando'> 
</div> 

<p id='pOut'>0s</p> 

var msg = 20;//global 

setInterval(
    function()//the code that will be executed 
    { 

     $('#pOut').text(msg++ + 's'); 
     $('#expando').css('height', msg * 1.5); 

    } 
    , 1000);//interval time in milliseconds 
相關問題