2010-05-28 36 views
0

我正在C#中制作一个包含移动新闻栏标签的桌面应用程序。 我正在使用一个计时器来移动这些标签,但问题是,当我让这个计时器的时间间隔较低(例如1-10)时,应用程序占用CPU使用率的百分比非常高,而当我使它更高时(200 -500)时,标签的移动变得间歇或不平滑,即使用户可能无法以舒适的方式阅读新闻。如何在没有定时器的情况下在Windows窗体应用程序中移动新闻栏

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

+0

你可以张贴一些代码,演示了如何在移动的消息栏标签?根据你如何做,它不应该占用太多CPU。 – JYelton 2010-05-28 23:50:05

+0

“C#”的描述不够。这是一个Windows窗体应用程序? WPF? GTK#? – hemp 2010-05-28 23:50:15

+0

它是Windows窗体应用程序。 我移动标签的方式如下: 来自RSS提要的新闻项目用一组链接标签表示。所有这些链接标签都被添加到一个流布局容器中。计时器移动整个流程布局容器。 我发现这种方式根据我的知识制作新闻栏的最佳方式。如果你有更好的主意或解决方案,请帮助。谢谢。 – EgyEast 2010-05-29 00:01:24

回答

0

定时器间隔代表什么?如果是毫秒,那么你可以将每秒更新的数量除以1000,并获得定时器的速率。

你也可以使用睡眠(100)左右,但它可能只是你试图在你的更新中做太多。也许你可以不那么频繁地做“重要改变”,比如每100次更新一次,或者把它们放在自己的计时器上,并尽可能少地更频繁地更新滚动。

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

+0

定时器只是移动flowlayoutpanel((请参阅上面添加的信息)) – EgyEast 2010-05-29 00:18:59

0

我怀疑问题是你使用计时器来移动ticker以及填充数据?

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

更新来自单独的定时器/线程的数据。

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(); 
} 
相关问题