这一定很容易,但让我感到难过。
如何在一个功能中多次更改屏幕上的元素?
我想在我的函数开头更改标签以读取类似“开始......”的内容,然后离开并做一些事情,然后在最后将标签更改为“已完成”。
作为说明,为什么以下代码:
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秒钟,然后将标签文字更改为“Go!”而不是倒计时?
TIA
本
答案 0 :(得分: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解决方案或异步更新。
答案 1 :(得分:2)
您的代码仅更新屏幕一次的原因是它在单个回发中运行。在回发结束时,HTML呈现在返回浏览器中以供显示。
在回发期间多次更新页面,实际上 不容易。但是对于你正在做的事情,有一个更简单的解决方案。使用JavaScript在请求开头将标题更改为“正在开始...”,然后让方法返回“完成”。
答案 2 :(得分:1)
因为它是一个网页,最终的值是发送到浏览器的内容。所有服务器端代码都会执行,然后将最终值发送给浏览器。
您的代码正在使用服务器上的新值更新控件,但客户端不会看到它。要执行您想要的操作,您必须通过客户端脚本(javascript)更新控件,或者必须刷新页面并显示更新的值。
这是asp.net页面生命周期的链接,这是你要问的问题。
http://msdn.microsoft.com/en-us/library/ms178472.aspx
如果您注意到Render方法之前没有任何内容发送到浏览器。
答案 3 :(得分:1)
您需要了解网络的运作方式;
然后这些javascripts可能会在加载后更改页面,但第2步无法更改已经发送给客户端的内容。
答案 4 :(得分:0)
如果是ASP.NET,所有代码都会在将html发送到浏览器之前执行,因此只会显示最后一个值。如果你想在客户端这样做,你将不得不做一些javascript。