2012-02-08 57 views
3

我有几个LINQ查询会根据各种过滤器转移记录(高达一百万),并根据生成的过滤行项目上的特定列的值修改控件。我想实现线程化,但是我使用LINQ来执行查询,而查询本身就是延迟的来源,所以我相信无论如何,进度条会立即从0跳到100%。有没有办法解决这个问题?在LINQ查询过程中提供用户反馈

一个具体的例子是Windows窗体组合框项目基于用户选择的另一个ComboBox的特定列的不同值进行填充。这些项目用于动态构建另一个linq查询,这些查询用于自定义动态制图工具。

+1

只是假冒的数字5%,13%,45%... 99%(两分钟)},窗户一直都是这样...... – gdoron 2012-02-08 20:01:39

+0

这不是一个有效的解决方案,所以我很高兴在评论部分看到这一点。 – sammarcow 2012-02-08 20:06:15

回答

3

使用SkipTake一次只能载入几条记录。如果提前得到Count,则可以在每个查询结束后提前进度栏。您需要在后台线程中完成所有这些操作,以保持UI的响应,以便进度栏显示更新。

+0

不要忘记正确地将UI更新编组到UI线程。 – 2012-02-08 20:19:59

+0

这只会在db查询占用相对较小的总时间时才起作用。反馈仅显示结果的处理。 – 2012-02-08 20:24:00

2

我想实现线程,但我使用LINQ来执行查询,查询本身是延迟的来源,所以我相信进度条会立即从0跳到100%。

所以主要部分是在Db上运行的查询。这里没有任何反馈,你将不得不伪造它。你不会是唯一这样做的人。

进度条不是(意图是)精确的检测,它是关于用户安抚。

+0

+1“用户安抚”:-) – Yahia 2012-02-08 20:20:04