2010-01-07 42 views
1

这很容易,但让我难住。在一个功能中多次更新屏幕元素

如何在一个函数中多次更改屏幕上的元素?

我想在我的函数开始处更改标签以读取类似“starting ...”的内容,然后离开并执行一些操作,然后在最后将标签更改为“已完成”。

作为一个例子,为什么下面的代码:

 errorMessage.Text = "Three..."; 
     System.Threading.Thread.Sleep(1000); 
     errorMessage.Text = "Two..."; 
     System.Threading.Thread.Sleep(1000); 
     errorMessage.Text = "One..."; 
     System.Threading.Thread.Sleep(1000); 
     errorMessage.Text = "Go!"; 
     System.Threading.Thread.Sleep(1000); 

只是暂停4秒钟,然后更改标签文本,以“走!”而不是倒计时?

TIA

回答

2

您的代码只更新一次屏幕的原因是它在单个回发内部运行。在回发结束时,HTML被渲染返回到浏览器进行显示。

在回发期间多次更新页面实际上不是很容易。但是对于你在做什么,有一个更简单的解决方案。在请求开始处使用JavaScript将标题更改为“正在...”,然后让方法返回“已完成”。

+0

@Craig,谢谢你。我虽然纠结了 - 如何添加一个Javascript和c#事件到我的按钮? – Ben 2010-01-07 16:52:15

1

因为它是一个网页,和最终值是什么是发送到浏览器。所有服务器端代码都会执行,然后将最终值发送给浏览器。

您的代码正在使用服务器上的新值更新控件,但它不会被客户端看到。要做你想做的事情,你必须通过客户端脚本(javascript)来更新控件,或者你必须刷新页面并显示更新后的值。

这是一个链接到asp.net页面生命周期这是有点你在问什么。

http://msdn.microsoft.com/en-us/library/ms178472.aspx

如果你注意到没有被发送到浏览器,直到Render方法。

0

如果是ASP.NET,所有代码将在发送html到浏览器之前执行,所以只显示最后一个值。如果你想在客户端做到这一点,你将不得不做一些JavaScript。

1

您需要了解网络的工作原理;

  1. 浏览器从服务器
  2. 请求一个页面服务器发送页面(和可能会做一些服务器端处理,比如ASP.net)
  3. 在客户端显示的页面,并运行在Java脚本页面

然后,这些javascripts可能会在页面加载后更改页面,但步骤2无法执行并更改已发送到客户端的内容。

3

如果你想计算一个进程的时间并把结果放到一个标签上,你应该在你的函数中使用一个字符串。尝试是这样的:

string countDownTimes = ""; 
countDownTimes += String.Format("One at: {0}, ",DateTime.Now.ToString()); 
System.Threading.Thread.Sleep(1000); 
countDownTimes += String.Format("Two at: {0}, ",DateTime.Now.ToString()); 
//etc.. 
errorMessage.Text = countDownTimes; 

如果您寻找更新的增量UI按钮,那么你应该看看一个JavaScript的解决方案或异步更新。