标签文本每秒刷新一次
本文关键字:一次 刷新 文本 标签 | 更新日期: 2023-09-27 18:19:58
我试图每秒刷新一次标签,这样倒计时就会更新,但遇到了一些麻烦。我对C#非常陌生,为noob问题道歉。
private void Form1_Load(object sender, EventArgs e)
{
bool ephCD = true;
int ephHours = (DateTime.Today.AddDays(1) - DateTime.Now).Hours;
int ephMinu = (DateTime.Today.AddDays(1) - DateTime.Now).Minutes;
int ephSecs = (DateTime.Today.AddDays(1) - DateTime.Now).Seconds;
label1.Text = ephHours.ToString() + ":" + ephMinu.ToString() + ":" + ephSecs.ToString();
while (ephCD == true)
{
label1.Refresh();
}
}
启动此程序时,程序甚至不会出现。
为什么程序没有出现?
您正在Form_Load
中执行一个无限循环。这意味着表单将永远无法完成加载,并且您的程序将被卡住。
刷新循环需要在一个单独的线程上,或者理想情况下抛出循环并使用Timer
,而不是在无限循环上旋转锁定CPU。
Timer myTimer = new Timer(1000);
void Form1_Load()
{
myTimer.Elapsed += UpdateLabel;
myTimer.Start();
}
private void UpdateLabel(object sender, ElapsedEventArgs e)
{
//Update label here
}
更新while
语句中的标签不是一个好的选择,更好的方法是使用Timer
类
var aTimer = new System.Timers.Timer(1000);
aTimer.Elapsed += OnTimedEvent;
aTimer.Enabled = true;
private static void OnTimedEvent(Object source, ElapsedEventArgs e)
{
//update the label
}
只需复制并粘贴即可:
private void Form1_Load(object sender, EventArgs e)
{
// To update the first time.
label1.Text = (DateTime.Today.AddDays(1)- DateTime.Now).ToString(@"hh':mm':ss");
var timer = new Timer {Interval = 1000};
timer.Tick += (o, args) =>
{
label1.Text = (DateTime.Today.AddDays(1)- DateTime.Now).ToString(@"hh':mm':ss");
};
timer.Start();
}
我最终得到了一个更简单的解决方案:
<script>
var myTimer = setInterval(Atualizar, 20000);
function Atualizar() {
__doPostBack('UpdatePanelNew', '');
}
</script>
请确保将要更新的内容包装在UpdatePanel中。
此代码将每隔20秒请求一次回发。所以在后面的代码中,我可以这样做:
protected void Page_Load(object sender, EventArgs e)
{
myLabel.InnerText = GetInDatabaseTheValueIwant();
}