【发布时间】:2015-10-28 17:17:38
【问题描述】:
我了解从另一个线程更新 UI 需要调用,但仅从 UI 读取数据时是否也需要调用?
例如,如果基于在大型网格中找到的数据运行计算,在读取网格中找到的值并将它们分配给计算中使用的变量时是否需要调用网格?
如果没有,为什么不呢?
是这样,有性能问题吗?将所有数据缓存到数组(或数据表)然后运行计算,还是在每次读取数据时(例如,在每一行)调用网格更好?
我特意询问的是 VB.NET,但我怀疑其他任何 .NET 语言之间是否存在很大差异。
【问题讨论】:
-
你不应该问这个问题。当您的线程在完全随机的时间点读取属性时,您期望获得什么值?当您允许用户继续编辑网格内容时,可以是任何东西。可能是半输入值。你会惊呼“我要禁用网格!”是的,这是个好主意。但是你不必再解决这个问题,因为你可以简单地读取你需要的值之前你开始线程。
-
你是对的,我可以在运行之前读取网格,因此如果不需要调用,我询问了两种方法之间的性能。但是,如果 UI 上的表已经包含这些值,为什么还要将这些值读入内存中的另一个表中呢?这对于大型表来说既繁琐又耗时。
-
UI 不是“表格”。将数据与视图分离是一种通用的编程方法,有很多好处。
-
请原谅我的无知,但是 datagridviewselectedrowcollection 不在 UI 线程上吗?我正在从该集合中提取用户选择要分析的项目。我可以访问网格后面的主数据表,但这并不能告诉我用户选择了哪些项目。正如我之前所说,选择列表很大,所以如果可以避免的话,将选定的项目复制到单独的表不是我的首选。
标签: .net vb.net multithreading