标签文本每秒刷新一次

时间:2014-08-29 20:34:18

标签: c# .net datetime

我试图每秒刷新一次标签,以便倒计时更新,遇到一些麻烦。对于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();
    }
}

启动时,程序甚至不会出现。

为什么程序没有出现?

4 个答案:

答案 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();
    }