Thread.Sleep方法

时间:2014-06-05 14:03:36

标签: c# asp.net

    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标签。并尝试使用sleep方法定期增加宽度以创建进度条。 我只能在循环结束时看到进度条。 只想逐步查看进度条的宽度增加。 这有什么问题。请任何人帮助我。

3 个答案:

答案 0 :(得分:2)

您无法使用服务器端代码执行此操作。这必须在客户端完成,很可能是在javascript中。

将ASP.NET视为构建一个发送到浏览器的大字符串。当页面经历它的生命周期时,你所做的一切只是构建一个单独的字符串,最后发送到浏览器。因此,在Prerender事件完成时代码离开页面的状态是它将被传递到浏览器的状态。这就是为什么你只看到&#34; final&#34;进度条的状态。

这是一个jQuery进度条的链接,您应该可以将其作为起点。 http://jqueryui.com/progressbar/

答案 1 :(得分:1)

您正在尝试使用服务器端代码来执行将在客户端执行的操作。服务器端代码将简单地将静态HTML输出到客户端(即浏览器),并停止执行。您可以在呈现之前操纵HTML;但在此之后,您需要使用Javascript(如果这是客户端语言)来执行页面的这种交互式操作。

您的代码基本上是在将页面提供给客户端之前执行,因此您只能看到此操作的最终结果。

OnLoad事件上(即在客户端加载页面之后),您可以使用Javascript执行此C#代码的变体来实现该效果。但是,使用jQuery进行这种操作会更简单。

答案 2 :(得分:0)

正如其他人所提到的,ASP技术在服务器上进行了一些处理,并将HTML响应发送回客户端。因此,您需要添加客户端Javascript代码才能对UI进行更改。

这是一种可以尝试搞乱的方法(使用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