在FMX中是否有LiveBindings的替代品,所以我可以使用线程生成的数据集?

时间:2015-01-23 13:04:22

标签: multithreading delphi firemonkey delphi-xe7 livebindings

现在我的FMX项目完全基于Livebinding将数据源连接到表单上的编辑器。

它很好用,除了速度慢,不使用分页加载(TLisView)。

但是,我有许多不同的数据源,数据量可能很大,连接最终会变慢。

我的想法是保持用户界面的响应,并让后台的线程使数据加载打开数据源并将它们置于正确的状态。之后,将数据源分配给表单上的控件。

我使用LiveBinding玩过但我无法将主线程与后台线程混合使用。发生了一些问题。

必须手动将每个字段记录加载到每个控件上似乎非常没有效果。我几乎所有的控件都已经包装好了,我根据FMX制作了自己的控件,所以我可以添加更多功能。

我想知道是否已经做了一些事情。我可以使用任何类或库来映射源和目标,并且我可以让控件在需要时激活,因为我可以通过线程在加载状态中有许多数据源。

2 个答案:

答案 0 :(得分:0)

这不是一个真正有问题的问题。

同样没有实时绑定,当您在线程中检索数据时,您必须尊重线程上下文。从连接获取数据集时,此数据集也绑定到该连接,并且连接绑定到线程上下文。

解决方案是将数据集复制到clientdataset并将该CDS移交给UI线程。现在,您可以将CDS绑定到任何您喜欢的位置。请记住,CDS和数据连接之间没有连接。你必须小心谨慎地回写这些变化。

答案 1 :(得分:0)

不知道这是否仍然有用。我经常利用TTask.Run和Thread.Queue,通过踏步将实时绑定与加载时间一起用于基础数据。重要的是要使LiveBinding AutoActivate = FALSE(即TLinkGridToDataBindSource或其他实时绑定)。

在TThread.Run中执行请求,并执行Execute,并在TThread.Queue中[在TThread.Run内部]将LiveBinding属性“ Active”设置为True。 Livebinding正在更新UI,并且必须出现在主线程中。

后续更新/请求以相同的方式进行,首先将active设置为false。