我试图每秒刷新一次标签,以便倒计时更新,遇到一些麻烦。对于noob问题,我对C#道歉非常陌生。
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();
}
}
启动时,程序甚至不会出现。
为什么程序没有出现?
答案 0 :(得分:7)
您正在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
}
答案 1 :(得分:1)
更新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
}
答案 2 :(得分:1)
这样做,只需复制并粘贴:
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();
}
答案 3 :(得分:0)
我最终得到了这个更简单的解决方案:
<script>
var myTimer = setInterval(Atualizar, 20000);
function Atualizar() {
__doPostBack('UpdatePanelNew', '');
}
</script>
确保在UpdatePanel中包装要更新的内容。
此代码将每20秒请求一次回发。所以在后面的代码中我可以这样做:
protected void Page_Load(object sender, EventArgs e)
{
myLabel.InnerText = GetInDatabaseTheValueIwant();
}