1

首先,我已经阅读了很多关于这个问题的内容,但我并不清楚。

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

我的应用程序运行良好,但数据加载过程会产生糟糕的用户体验。例如,我将重点放在请求大量数据的主窗口中,因此加载并显示在网格中需要 2-3 秒。

当我第一次执行它时,我真正想在我的应用程序中看到的是,GUI 立即加载,然后让数据加载工作,在网格上显示微调器、等待对象或其他任何内容,直到这些进程(异步?)加载.

在这种情况下(在我的测试中),无论加载数据的顺序(在代码中,我的意思是)是在哪里进行的:在构造函数内部,在几个事件(初始化、加载等)结束时,在就在 ShowDialog 指令之前的初始化方法......直到我的网格加载了这些东西,GUI 窗口才会出现。

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

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

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

问候,博尔哈。

4

2 回答 2

0

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

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

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

这两个都应该导致释放主线程并允许呈现表单。

于 2013-05-15T20:56:06.457 回答
0

这是技术问题,但通常您使用 ObservableCollection 将数据分成更小的项目。您以 20 个为一组添加项目,并让 UI 也显示微调器,同时保持响应。将块加载保持在 50 毫秒,您也永远不会直接在 UI 线程上加载数据,而是在辅助线程(后台工作人员)上。

于 2013-05-15T20:43:57.047 回答