GUI和数据加载并行

本文关键字:并行 加载 数据 GUI | 更新日期: 2023-09-27 18:13:59

首先,我读了很多关于这个问题的书,但是我不太清楚。

我正在开发一个WPF应用程序,这意味着从数据库、本地/远程文件、web服务等加载大量信息。比如,这些数据被加载到数据网格和这种控件中。

我的应用运行良好,但数据加载过程产生了糟糕的用户体验。例如,我将专注于主窗口,它需要大量数据,因此需要2-3秒才能加载并显示在网格中。

当我第一次执行我的应用程序时,我真正想看到的是GUI立即加载,然后让数据加载工作,显示一个旋转器,等待对象,或者网格上的任何东西,直到这些进程(异步?)加载。

在这种情况下(在我的测试中),无论在哪里加载数据的顺序(我的意思是在代码中):在构造函数中,在几个事件(initialized, load等)的末尾,在ShowDialog指令之前的Init方法中…GUI窗口不会出现,直到我的网格加载的东西。

我想我应该处理线程,有一个GUI和另一个异步加载数据,但我已经用Dispatcher, delegate等做了一些测试,没有成功。

综上所述,目标是尽可能快地加载GUI,然后加载数据并刷新GUI。

现在我有点困惑,我读了关于线程,调度程序等的问题,但我不知道它们是否适用于我的需求。我希望你能告诉我该怎么做。

问候,博尔哈。

GUI和数据加载并行

这是技术上的事情,但通常您使用ObservableCollection将数据块分成更小的项。您可以在20块上添加项目,并让UI也显示旋转器,同时保持响应。将块加载保持在50ms,并且您永远不会直接在UI线程上加载数据,而是在次要线程(后台工作线程)上加载数据。

如果绝对需要大数据集并将所有数据加载到内存中,那么考虑如下:

当你对web服务进行同步调用时,你实际上并没有做任何处理,但是你锁定了执行,直到返回结果。如果您使用异步调用,您将实际发送请求,然后您的程序将继续执行,直到web服务返回结果。

如果异步调用不起作用,只需使用BackgroundWorker在另一个线程上完成所有的数据工作。