Текст ярлыка обновляется каждую секунду

1

Я пытаюсь обновить ярлык каждую секунду, чтобы обновления обратного отсчета имели некоторые проблемы. Я чрезвычайно новичок в С# извинения за вопросы 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();
    }
}

При запуске программа даже не появляется.

Почему программа не появляется?

  • 2
    В чем конкретно проблема ?
  • 0
    Что ж, при запуске этого программа даже не появляется, я предполагаю, что цикл while обновляет кадр так быстро, что я даже не вижу его. Обратный отсчет для label1 не обновляется, он статический.
Теги:
datetime

4 ответа

7

Вы выполняете бесконечный цикл в Form_Load. Это означает, что форма никогда не закончит загрузку, и ваша программа застрянет.

Ваш цикл обновления должен находиться в отдельном потоке или идеально подбрасывать цикл и использовать Timer вместо того, чтобы запирать ЦП на бесконечном цикле.

Timer myTimer = new Timer(1000);
void Form1_Load()
{
     myTimer.Elapsed += UpdateLabel;
     myTimer.Start();
}

private void UpdateLabel(object sender, ElapsedEventArgs e)
{
    //Update label here
}
  • 0
    Нужна ли мне панель обновления?
  • 0
    Пространство имен таймера - System.Timers.Timer
Показать ещё 1 комментарий
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();
    }
  • 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
}
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();
    }

Ещё вопросы

Сообщество Overcoder
Наверх
Меню