2

我有一个TList由许多for循环连续处理的项目。我有时需要交换列表中的项目以重新排列列表的视觉表示顺序(在 a 中StringGrid)。

我如何交换这些物品?

我的初步想法是:

  • 在 for 循环期间,我认为不应交换项目。
  • 如果我在定时器OnTimer事件中进行交换,将定时器的间隔设置为非常短的间隔(例如 1 毫秒),那么我认为 for 循环将只有一毫秒的间歇。

这行得通吗?还是有更好的选择?

4

1 回答 1

2

只要您确保 a 中项目的数量TList不变,在 for 循环期间交换项目就完全可以了。请注意,根据即将交换的项目的索引,某些项目可能无法处理或可能会被处理两次。

如果交换操作不是从 for 循环中调用的,那么一个已经启动的 for 循环将一直运行直到它完成。您不能指望“闯入” Timer,因为在 for 循环和所有周围代码完成之前,不会处理 Timer 的消息。

因此,您的问题的解决方案可能是:

  • 交换for循环中的项目,
  • 使用线程解决方案能够在一个列表上同时做两件不同的事情(这可能需要一些关于线程的学习),
  • 等到for循环完成,然后交换,
  • 将 for 循环拆分为多个切片以减少所需时间,或
  • 使用计时器启动多个 for 循环,以便让您的程序在两者之间有一些喘息时间。
于 2015-05-14T16:01:16.957 回答