1

好吧,我有一个DataGridView,我想加载数据,我从后台工作人员运行的SQLDataReader中检索数据(它是一个需要很长时间的查询)。VB.NET DataGridView加载来自后台工作者和SQLDataReader的数据

我的目标是让用户体验类似于在Windows中搜索文件,当结果出现在列表中时,结果将显示在列表中,您仍然可以与窗口进行交互。

我让它与后台工作者和数据读取器一起工作,我试图通过使用BackgroundWorker.ReportProgress方法从SQLDataReader.Read添加行。一切技术上的作品,但闪烁是疯狂的,形式是无法使用的(可能不是因为GUI线程被阻止,只是因为有这么多的事情......)

任何想法?我如何使datagridview“平滑”加载?

回答

0

您将要调节调用ReportProgress的速率。不要为每一行调用它。相反,排队几行,然后拨打ReportProgress。调整它,以便ProgressChanged事件每两秒钟提高一次。

老实说,这是一个场景,我发现BackgroundWorker迫使你成为一个糟糕的设计。我要做的就是放弃BackgroundWorker并手动创建一个新的ThreadTask来完成加载。让您的工作线程将行排入Queue<T>或其他一些数据结构中,然后让您的UI线程通过System.Windows.Form.Timer定期轮询该队列,在任何时间间隔内最适合您。 UI线程将提取合理数量的行并将它们放置在网格中,它不会尝试做太多并挂起UI,或者太长而无法使用。