【发布时间】:2014-11-24 06:43:44
【问题描述】:
我应该首先提到我是编程新手。我会尽我所能解释我的问题和我的问题。
我想知道是否可以更新 ObjectListView 的单个列(从这里称为 OLV)。我想要的是有一列可以显示每行的“经过时间”。此 Elapsed Time 列将每 15 到 30 秒刷新一次。
我如何设置我的 OLV
myOLV.SetObjects(GetMyList());
GetMyList 方法返回一个从简单数据库查询中填充的列表。
在 GetMyList 方法中,它将 DateTime 列转换为显示经过时间的字符串。然后 OLV 将其显示为字符串,而不是日期时间...
elapsed_time = ((TimeSpan)(DateTime.Now - x.time_arrived)).ToString("hh\\:mm\\:ss");
我尝试通过使用每 30 秒调用一次 GetMyList 方法的计时器来完成这项工作。因为该方法将重新查询数据库并返回它检索到的记录,所以它们是最新的。这一直很好,直到我在 OLV 中有超过 20 行。 200 行的每次“刷新”需要 4 秒才能完成。即 UI 无响应的 4 秒...
由于我是编程新手,我从来没有对多线程做过任何事情,但我做了一些阅读并尝试创建一个解决方案。即使我创建了一个新线程来“刷新”OLV 对象,它仍然会导致整个表单变得无响应。
我的问题是,如何让我的 ObjectListView 中的列每 15-30 秒刷新一次,而不会导致整个 UI 变得无响应? 让 ObjectListView 在后台刷新然后在它准备好时显示它甚至可能/一个好主意吗?
【问题讨论】:
标签: c# multithreading winforms objectlistview