我正在用C#制作一个桌面应用程序,其中包含一个移动的新闻栏标签。我正在使用计时器来移动这些标签,但是问题是,当我降低此计时器的间隔(例如1-10)时,应用程序会占用很高的CPU使用率百分比,而当我将其提高时(200- 500),即使用户可能无法以舒适的方式阅读新闻,标签的移动也变得间歇性或不平稳。
(((更多信息))它是Windows窗体应用程序。我移动标签的方式如下:来自RSS源的新闻项以一组linklabel表示。所有这些链接标签都添加到了flowlayout容器中。计时器将移动整个layoutlay容器。根据我的知识,我发现这种方式是制作新闻栏的最佳方法。如果您有更好的主意或解决方案,请帮助
计时器间隔代表什么?如果以毫秒为单位,则可以将所需的每秒更新次数除以一千,并获得计时器速率。
您也可以使用Sleep(100)左右,但可能只是您尝试在更新中做太多事情。也许您可以不那么频繁地进行“重要更改”,例如每100个更新左右一次,或者将它们放在自己的计时器上,并且尽可能少地进行更频繁地更新滚动。
当您将应用程序设置为每秒进行100或1000次更新时,您的应用程序占用大量CPU并不奇怪。 :)
我怀疑问题是您正在使用计时器来移动股票行情以及填充数据吗?
如果要使用计时器来滚动视图,那应该没问题。您的代码必须非常轻巧(只需更新垂直或水平位置并返回)。但是,更好的方法是使用“游戏循环”之类的方法来达到您想要的更新频率(在每次迭代中,确定移动视图所花的时间,然后休眠以毫秒为单位)达到目标频率。)
从单独的计时器/线程更新数据。
外观:拖动一个标签和一个计时器设置计时器间隔= 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();
}
您可以创建一个自定义字幕标签,该标签使用计时器并重绘自身,并从左到右或从上到下为文本设置动画,例如horizontal marquee label或vertical 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> ";