标签文本每秒刷新一次

本文关键字:一次 刷新 文本 标签 | 更新日期: 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();
    }