如何在 for 循环期间交换 TList 项目
How to exchange TList items during a for-loop
我有一个 TList
项目由许多 for
循环连续处理。有时我需要交换列表中的项目,以便重新排列列表的视觉表示顺序(在 StringGrid
中)。
如何兑换这些物品?
我的初步想法是:
- 在for-loop过程中,我认为不应该交换物品。
- 如果我在定时器的
OnTimer
事件中进行交换,将定时器的间隔设置为非常短的间隔(例如 1 毫秒),那么我认为 for 循环将只有一个间歇那一毫秒。
这行得通吗?或者有更好的选择吗?
只要确保 TList
中的项目数不变,在 for 循环期间交换项目就完全没问题。请注意,根据即将交换的物品的索引,部分物品可能未被处理或可能被处理两次。
如果交换操作不是从 for 循环中调用的,那么已经开始的 for 循环将 运行 直到它完成。您不能指望 "break in" 使用 Timer,因为在 for 循环和所有周围代码完成之前不会处理该 Timer 的消息。
因此,您的问题的解决方案可能是:
- 在 for 循环中交换项目,
- 使用线程解决方案能够在一个列表上同时做两件不同的事情(这可能需要学习一些关于线程的知识),
- 等到for循环完成,然后交换,
- 将 for 循环分成多个片段以减少所需时间,或者
- 使用计时器启动多个 for 循环,以便在中间给您的程序一些喘息时间。
我有一个 TList
项目由许多 for
循环连续处理。有时我需要交换列表中的项目,以便重新排列列表的视觉表示顺序(在 StringGrid
中)。
如何兑换这些物品?
我的初步想法是:
- 在for-loop过程中,我认为不应该交换物品。
- 如果我在定时器的
OnTimer
事件中进行交换,将定时器的间隔设置为非常短的间隔(例如 1 毫秒),那么我认为 for 循环将只有一个间歇那一毫秒。
这行得通吗?或者有更好的选择吗?
只要确保 TList
中的项目数不变,在 for 循环期间交换项目就完全没问题。请注意,根据即将交换的物品的索引,部分物品可能未被处理或可能被处理两次。
如果交换操作不是从 for 循环中调用的,那么已经开始的 for 循环将 运行 直到它完成。您不能指望 "break in" 使用 Timer,因为在 for 循环和所有周围代码完成之前不会处理该 Timer 的消息。
因此,您的问题的解决方案可能是:
- 在 for 循环中交换项目,
- 使用线程解决方案能够在一个列表上同时做两件不同的事情(这可能需要学习一些关于线程的知识),
- 等到for循环完成,然后交换,
- 将 for 循环分成多个片段以减少所需时间,或者
- 使用计时器启动多个 for 循环,以便在中间给您的程序一些喘息时间。