Как сделать движущуюся панель новостей в приложении Windows Forms без таймера

Я делаю настольное приложение на C #, которое содержит движущиеся ярлыки панели новостей. Я использую таймер для перемещения этих меток, но проблема в том, что когда я делаю интервал этого таймера низким (например, 1-10), приложение занимает очень высокий процент использования ЦП, а когда я увеличиваю его (200 - 500) движение меток становится прерывистым или не плавным, даже если пользователь не может читать новости в удобной форме.

((Подробнее)) это приложение для Windows. Я перемещаю метки следующим образом: новости из RSS-каналов представлены в виде группы меток ссылок. Все эти метки ссылок добавляются в контейнер flowlayout. Таймер перемещает весь контейнер flowlayout. Я нашел этот способ, насколько мне известно, лучший способ сделать панель новостей. Если у вас есть идея или решение получше, пожалуйста, помогите.


person EgyEast    schedule 28.05.2010    source источник
comment
Можете ли вы опубликовать код, который показывает, как вы перемещаете ярлыки панели новостей? Это не должно занимать много процессора в зависимости от того, как вы это делаете.   -  person JYelton    schedule 29.05.2010
comment
C # недостаточно информативен. Это приложение Windows Forms? WPF? GTK #?   -  person hemp    schedule 29.05.2010
comment
это приложение формы Windows. Я перемещаю метки следующим образом: новости из RSS-каналов представлены в виде группы меток ссылок. Все эти метки ссылок добавляются в контейнер flowlayout. Таймер перемещает весь контейнер flowlayout. Я нашел этот способ, насколько мне известно, лучший способ сделать панель новостей. Если у вас есть идея или решение получше, пожалуйста, помогите. Спасибо.   -  person EgyEast    schedule 29.05.2010


Ответы (4)


Что представляет собой интервал таймера? Если это миллисекунды, то вы можете разделить количество обновлений в секунду, которое вы хотите, на тысячу и получить частоту таймера.

Вы также можете использовать Sleep (100) или около того, но, возможно, вы просто пытаетесь сделать слишком много в своем обновлении. Может быть, вы можете делать «важные изменения» гораздо реже, например, каждые 100 обновлений или около того, или ставить их на свой собственный таймер и делать как можно меньше, чтобы обновлять прокрутку гораздо чаще.

Неудивительно, что ваше приложение требует много ресурсов ЦП, если вы настроили его обновлять 100 или 1000 раз в секунду. :)

person dash-tom-bang    schedule 28.05.2010
comment
таймер просто перемещает панель flowlayout ((см. информацию, добавленную выше)) - person EgyEast; 29.05.2010

Я подозреваю, что проблема в том, что вы используете таймер для перемещения тикера, а также для заполнения данных?

Если вы хотите использовать таймер для прокрутки представления, это должно быть нормально. Ваш код должен быть очень легким (просто обновите вертикальное или горизонтальное положение и вернитесь). Однако лучшим подходом было бы использование чего-то вроде «игрового цикла» для достижения той частоты обновления, которая вам нужна (в каждой итерации, время, необходимое для перемещения представления, затем спящий режим для количества миллисекунд, оставшихся до поразите вашу целевую частоту.)

Обновите данные из отдельного таймера / потока.

person hemp    schedule 28.05.2010

Посмотрите: перетащите одну метку и один таймер. Установите интервал таймера = 100, затем:

private void timer1_Tick(object sender, EventArgs e)
{
    label1.Location = new Point(label1.Location.X + 5, label1.Location.Y);

    if (label1.Location.X > this.Width)
    {
        label1.Location = new Point(0 - label1.Width, label1.Location.Y);

        label1.Text = "Your Message Here ";
    }
}

private void Form1_Load(object sender, EventArgs e)
{
    timer1.Start();
}
person Abu Ehab    schedule 18.05.2014

Вы можете создать настраиваемую метку выделения, которая использует таймер, перерисовывает себя и анимирует текст слева направо или сверху вниз, например, по горизонтали метку выделения или эту этикетку с вертикальной рамкой.

Но поскольку вы спросили о чем-то без таймера, хорошим вариантом является использование элемента управления WebBrowser, показывающего _ 2_, простой и гибкий.

Вы можете установить для этого любой контент, настроить поведение, направление, скорость, внешний вид, ширину, высоту и полностью настроить его.

Пример

this.webBrowser1.DocumentText = @"
    <marquee>
    <span style='color:#f00;'>Breaking news: </span>
    Lorem ipsum dolor sit amet, consectetur adipiscing elit.
    </marquee>";

введите здесь описание изображения

person Reza Aghaei    schedule 02.01.2020
comment
Этот вопрос был задан десять лет назад, но я считаю, что он все еще нуждается в ответе. - person Reza Aghaei; 03.01.2020