线程.睡眠的方法

本文关键字:方法 线程 | 更新日期: 2023-09-27 18:07:06

    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方法创建进度条来周期性地增加宽度。我只能在循环完成结束时看到进度条。只是想看到进度条一步一步地增加宽度。这里的问题是什么?

线程.睡眠的方法

您将无法使用服务器端代码来完成此操作。这必须在客户端完成,最有可能在javascript中。

想想ASP。NET作为构建一个大字符串被发送到浏览器。当页面经历它的生命周期时,你所做的一切都只是构建一个字符串,它在最后被发送到浏览器。因此,无论代码在Prerender事件完成时离开页面的状态是什么,它都将被传递给浏览器。这就是为什么你只能看到进度条的"最终"状态。

这是一个链接到一个jQuery进度条,你应该可以使用它作为一个起点。http://jqueryui.com/progressbar/

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

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

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

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

这里有一种方法(使用JQuery),您可以尝试一下(Fiddle: 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