2010-01-21 156 views
0

我面临一个问题。c#每秒钟刷新大数据

我有一个列表视图,是详细形式..

它具有大量数据的显示量。并且数据在每秒之后不断更新。

当前状态列表视图闪烁。我该如何解决这个问题

+0

ASP.NET或WinForms? (听起来不像WPF。) – 2010-01-21 14:18:32

+0

我想在Winform中使用它 – Mohsan 2010-01-21 14:22:12

回答

0

使用ObjectListView项目中的FastObjectListView项目 - .NET WinForms ListView控件的一个包装。快速版本是一个虚拟列表,它使用双缓冲来提供无闪烁更新。

我将它用于超过50,000个对象的列表视图,更新时间小于0.5秒(在中档笔记本电脑上)。

但是即使几乎即时更新,您的用户将很难使用每秒更改其内容的控件。

2

而不是只刷新页面拉入新的内容也许你可以使用jQuery和JSON?

因此,请使用jquery每隔X秒发送一次调用ashx页面的更多信息请求。 ashx页面从数据库中获取数据,然后返回结果值作为json,这样jquery可以轻松地解析结果并显示在屏幕上。

使用下面的jQuery,C#和Web服务做这类事情的伟大教程:

Encosia - using jquery to consume aspnet

jquery json documentation

希望这是给你一些帮助。

编辑:我的答案假设你使用的是asp.net web窗体。我从来没有使用赢的形式(除了我的旧vb 6天),所以不知道你是否可以使用jQuery或不在那里。

0

在WinForms应用程序中闪烁的一部分可以通过对其中的窗体和/或控件进行双缓冲来解决。另请参见:Anti Flicker Graphics using Double Buffering

SetStyle(ControlStyles.UserPaint, true); 
SetStyle(ControlStyles.AllPaintingInWmPaint, true); 
SetStyle(ControlStyles.DoubleBuffer, true); 

或者,查看到Control.DoubleBuffered属性:

1

在的WinForms,以防止这种闪烁效果,则需要用户一个BackgroundWorker对象在一个单独的线程中运行你的进程。然后,在可接受的时间间隔后,使用BackgroundWorker的ReportProgress适当地更新列表。

http://msdn.microsoft.com/en-us/library/system.componentmodel.backgroundworker.aspx http://www.dotneat.net/2009/02/10/BackgroundworkerExample.aspx http://dotnetperls.com/backgroundworker

这将允许您定期调用列表的Refresh()方法不强制闪光,因为流程会在不同的线程。

+0

难道你不觉得列表闪烁只是因为它很大,而不是因为有两个线程,是吗? – 2010-01-21 15:03:35

+0

@Igor - 总是有可能,但我有几个WinForms应用程序,它们的文本框很大。将进程移动到另一个线程并调用Refresh()方法为我清除它。其他用户列出的DoubleBuffering方法也是缓解问题的好方法。我只是想我会发表一个替代的想法。 – 2010-01-21 15:31:27

+0

对于可能的误解抱歉,当我说“大”时,我的意思是“一个非常大的行数”,在这种情况下,需要花费大量时间重新绘制列表框。我认为如果您只是反复调用Refresh(),即使不添加行,它也会闪烁。 – 2010-01-21 15:53:57