Стоп метка от мерцания на Timer.Tick - PullRequest
0 голосов
/ 21 декабря 2018

Я делаю приложение с обратным отсчетом.
Проблема в том, что метка мигает, когда ее текст обновляется по метке таймера.

Примечание. Я нашел повторяющийся вопрос , однако проблема осталась после применения этого исправления. Ссылка

Заранее спасибо

DateTime endTime = new DateTime(2018, 12, 21, 13, 0, 0);

private void Form1_Load(object sender, EventArgs e)
{
    t.Interval = 500;
    t.Tick += new EventHandler(t_Tick);
    TimeSpan ts = endTime.Subtract(DateTime.Now);
    countDown.Text = ts.ToString("d' Days 'h' Hours 'm' Minutes 's' Seconds'");
    t.Start();
}

void t_Tick(object sender, EventArgs e)
{
    TimeSpan ts = endTime.Subtract(DateTime.Now);
    countDown.Text = ts.ToString("d' Days 'h' Hours 'm' Minutes 's' Seconds'");
}

1 Ответ

0 голосов
/ 22 декабря 2018

Поскольку, как вы сказали в комментариях, для вашего Form.BackGroundImage назначено изображение, обновление пользовательского интерфейса может вызвать мерцание.Это вполне нормально.
Чтобы устранить (или значительно уменьшить) мерцание, активируйте функцию Двойная буферизация формы:

Form.DoubleBuffered = true

Из документов:

Буферизованная графика может уменьшить или устранить мерцание, вызванное постепенным перерисовыванием частей отображаемой поверхности.Буферизованная графика требует, чтобы обновленные графические данные были сначала записаны в буфер.Данные в графическом буфере затем быстро записываются в отображаемую поверхность памяти.Относительно быстрое переключение отображаемой графической памяти обычно уменьшает мерцание, которое может возникнуть в противном случае.

Некоторые интересные документы по этому вопросу:

Графика с двойной буферизацией (Windows Forms)
Как: уменьшить мерцание графики с двойной буферизацией для форм и элементов управления

Если активация двойной буферизации только частично устраняет мерцание, попробуйте изменить некоторые битовые флагикласс, использующий метод SetStyle , включающий эти функции ControlStyles .В конструкторе Form:
(также допустимый метод для других элементов управления, особенно класса Panel)

public Form1()
{
    SetStyle(ControlStyles.AllPaintingInWmPaint | 
             ControlStyles.UserPaint | 
             ControlStyles.OptimizedDoubleBuffer, true);
    this.UpdateStyles();
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...