数据源加载时,应用程序窗口挂起

本文关键字:窗口 挂起 应用程序 加载 数据源 | 更新日期: 2023-09-27 18:06:30

我按下一个按钮(位于主窗体,MDI父窗体上),它触发BackgroundWorker的RunWorkerAsync方法(位于相同的MDI父窗体上)。在这个方法中,我设置了我的DataGridView的数据源,它位于我的主Mdi窗口拥有的一个子窗口内。下面是RunWorkerAsync的代码:

        Action d = () => {
        ((DataGridView) data_viewer.gridviewer).SuspendLayout();
        ((DataGridView) data_viewer.gridviewer).DataSource = datatable_copied;
        ((DataGridView) data_viewer.gridviewer).ResumeLayout();
        };
        base.Invoke( d );

上面的代码填充网格OK。所有数据都传送到网格中。问题是,我将与非常大的表工作,而数据加载整个应用程序挂起,包括Mdi父窗口。我不介意有DGV挂起,但对于主MDI父窗口和包含DGV的子窗口挂起,而这整个事情加载太多了。我怎么解决这个问题?我希望能够移动包含DGV的子窗口而没有问题,而它加载(或可能绘制)整个数据表。我以为使用后台工作人员可以解决这个问题,但显然它没有。

数据源加载时,应用程序窗口挂起

在WinForm上渲染一个巨大的表是无法避免的。

无论是否异步,UI仍然需要渲染整个网格。将它推到后台线程只会使UI在计算和渲染时响应更快。

另一种方法是有意义地分页数据,以便:

  1. 减少网络流量
  2. 减少WinForm的内存
  3. 加快渲染时间

用户在一次点击中需要1000行还是100,000行数据?人类无法计算出如此规模的信息,因此报告汇总了这些值。

看看这篇关于对DataGridView分页的StackOverflow帖子,看看是否有帮助。