C# 标签文本每秒刷新一次
我试图每秒刷新一次标签,以便倒计时更新,但遇到了一些问题。我对C#非常陌生,为noob的问题道歉C# 标签文本每秒刷新一次,c#,.net,datetime,C#,.net,Datetime,我试图每秒刷新一次标签,以便倒计时更新,但遇到了一些问题。我对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
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();
}
}
启动此程序时,程序甚至不会出现
为什么程序没有出现?您正在以加载的形式执行无限循环。这意味着表单将永远无法完成加载,并且您的程序将被卡住 您的刷新循环需要在一个单独的线程上,或者理想情况下抛出该循环并使用一个而不是在无限循环上旋转锁定CPU
Timer myTimer = new Timer(1000);
void Form1_Load()
{
myTimer.Elapsed += UpdateLabel;
myTimer.Start();
}
private void UpdateLabel(object sender, ElapsedEventArgs e)
{
//Update label here
}
更新
语句中的标签虽然语句不是一个好选项,但更好的方法是使用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>
到底是什么问题?当启动这个程序时,程序甚至没有出现,我假设while循环刷新帧的速度太快了,我甚至看不到它。label1的倒计时没有更新,它是静态的。该计时器将在窗体被释放后继续计时。您应该将计时器声明移动到表单级别。是否需要UpdatePanel?计时器命名空间为System.Timers。Timer@SevaUpdatePanel是ASP的东西,对吗?那会有很大的不同。
protected void Page_Load(object sender, EventArgs e)
{
myLabel.InnerText = GetInDatabaseTheValueIwant();
}