我正面临一个问题。
我有一个详细列表的列表视图..
它要显示大量数据。并且数据在每秒后不断更新。
在当前情况列表视图中闪烁。我该如何解决这个问题
答案 0 :(得分:2)
您可以使用jquery和JSON,而不只是刷新页面以获取新内容吗?
因此,每隔X秒调用一次ashx页面,使用jquery发送请求以获取更多信息。 ashx页面从数据库中获取数据然后返回,您应该将结果值作为json返回,以便jquery可以轻松地解析结果并显示在屏幕上。
使用下面的jquery,c#和web服务来做这类事情的好教程:
Encosia - using jquery to consume aspnet
希望对你有所帮助。
编辑:我的回答是假设您使用的是asp.net网络表单。我从来没有使用过win表单(除了我的旧vb 6天)所以不确定你是否可以使用jquery或者不在那里工作。答案 1 :(得分: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()方法而不会强制闪烁,因为进程将位于不同的线程中。
答案 2 :(得分:0)
WinForms应用程序中闪烁的一部分可以通过双重缓冲其中的表单和/或控件来解决。另见:Anti Flicker Graphics using Double Buffering
SetStyle(ControlStyles.UserPaint, true);
SetStyle(ControlStyles.AllPaintingInWmPaint, true);
SetStyle(ControlStyles.DoubleBuffer, true);
或者,查看Control.DoubleBuffered属性:
答案 3 :(得分:0)
使用ObjectListView项目中的FastObjectListView
- 围绕.NET WinForms ListView控件的包装器。快速版本是一个虚拟列表,它使用双缓冲来提供无闪烁的更新。
我将它用于包含超过50,000个对象的列表视图,更新时间少于0.5秒(在中档笔记本电脑上)。
但即使几乎是即时更新,您的用户也会很难使用每秒更改其内容的控件。