如何在 for 循环期间交换 TList 项目

How to exchange TList items during a for-loop

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

如何兑换这些物品?

我的初步想法是:

这行得通吗?或者有更好的选择吗?

只要确保 TList 中的项目数不变,在 for 循环期间交换项目就完全没问题。请注意,根据即将交换的物品的索引,部分物品可能未被处理或可能被处理两次。

如果交换操作不是从 for 循环中调用的,那么已经开始的 for 循环将 运行 直到它完成。您不能指望 "break in" 使用 Timer,因为在 for 循环和所有周围代码完成之前不会处理该 Timer 的消息。

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

  • 在 for 循环中交换项目,
  • 使用线程解决方案能够在一个列表上同时做两件不同的事情(这可能需要学习一些关于线程的知识),
  • 等到for循环完成,然后交换,
  • 将 for 循环分成多个片段以减少所需时间,或者
  • 使用计时器启动多个 for 循环,以便在中间给您的程序一些喘息时间。