Как сделать движущуюся панель новостей в приложении Windows Forms без таймера - PullRequest
0 голосов
/ 29 мая 2010

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

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

Ответы [ 3 ]

0 голосов
/ 29 мая 2010

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

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

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

0 голосов
/ 18 мая 2014

Взгляд: перетащите одну метку и один таймер Установить интервал таймера = 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();
}
0 голосов
/ 29 мая 2010

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...