1

我正在用 C# 制作一个桌面应用程序,其中包含一个移动的新闻栏标签。我正在使用计时器来移动这些标签,但问题是当我将此计时器的间隔设置为低(例如 1-10)时,应用程序会占用非常高的 CPU 使用率,而当我将其设置为更高时(200 - 500)标签的移动变得断断续续或移动不顺畅,即使用户可能无法以舒适的方式阅读新闻。

((更多信息))它是 Windows 窗体应用程序。我移动标签的方式如下:来自 RSS 提要的新闻项目以一组链接标签表示。所有这些链接标签都添加到流程布局容器中。计时器移动整个流程布局容器。据我所知,我发现这种方式是制作新闻栏的最佳方式。如果您有更好的想法或解决方案,请提供帮助。

4

4 回答 4

0

我怀疑问题是您正在使用计时器来移动股票代码以及填充数据?

如果您想使用计时器来滚动视图,那应该没问题。您的代码需要非常轻巧(只需更新垂直或水平位置并返回)。然而,更好的方法是使用“游戏循环”之类的东西来实现您之后的任何更新频率(在每次迭代中,计算移动视图所需的时间,然后休眠剩余的毫秒数到达到你的目标频率。)

从单独的计时器/线程更新数据。

于 2010-05-28T23:52:28.983 回答
0

看:拖动一个标签和一个计时器设置计时器间隔 = 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();
}
于 2014-05-18T17:50:45.847 回答
0

定时器间隔代表什么?如果是毫秒,那么您可以将您想要的每秒更新次数除以一千并获得计时器速率。

您也可以使用 Sleep(100) 左右,但这可能只是您在更新中尝试做的太多。也许您可以不那么频繁地进行“重要更改”,例如每 100 次左右更新一次,或者将它们放在自己的计时器上,并尽可能少地更新滚动。

当您将应用程序设置为每秒更新 100 或 1000 次时,它会占用大量 CPU 也就不足为奇了。:)

于 2010-05-28T23:49:23.797 回答
0

您可以创建一个自定义选取框标签,该标签使用计时器并重绘自身并从左到右或从上到下为文本设置动画,例如这个水平选取框标签或这个垂直选取框标签

但是,由于您询问了一些没有计时器的问题,因此一个不错的选择是使用WebBrowser显示marquee标签的控件,既简单又灵活。

您可以为此设置任何内容,设置行为、方向、速度、外观、宽度、高度并完全自定义它。

例子

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

在此处输入图像描述

于 2020-01-02T19:31:48.807 回答