如何在不使用计时器的情况下在Windows窗体应用程序中移动新闻栏

问题描述 投票:1回答:4

我正在用C#制作一个桌面应用程序,其中包含一个移动的新闻栏标签。我正在使用计时器来移动这些标签,但是问题是,当我降低此计时器的间隔(例如1-10)时,应用程序会占用很高的CPU使用率百分比,而当我将其提高时(200- 500),即使用户可能无法以舒适的方式阅读新闻,标签的移动也变得间歇性或不平稳。

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

c# .net winforms marquee
4个回答
0
投票

计时器间隔代表什么?如果以毫秒为单位,则可以将所需的每秒更新次数除以一千,并获得计时器速率。

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

当您将应用程序设置为每秒进行100或1000次更新时,您的应用程序占用大量CPU并不奇怪。 :)


0
投票

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

如果要使用计时器来滚动视图,那应该没问题。您的代码必须非常轻巧(只需更新垂直或水平位置并返回)。但是,更好的方法是使用“游戏循环”之类的方法来达到您想要的更新频率(在每次迭代中,确定移动视图所花的时间,然后休眠以毫秒为单位)达到目标频率。)

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


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();
}

0
投票

您可以创建一个自定义字幕标签,该标签使用计时器并重绘自身,并从左到右或从上到下为文本设置动画,例如horizontal marquee labelvertical marquee label

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

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

示例

marquee

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

© www.soinside.com 2019 - 2024. All rights reserved.