gpt4 book ai didi

c# - 延迟执行的最佳方法

转载 作者:太空宇宙 更新时间:2023-11-03 23:25:21 24 4
gpt4 key购买 nike

假设我有一个方法,我通过 Task.Factory.StartNew() 在单独的线程中运行。
此方法报告了如此多的进度 (IProgress),以至于卡住了我的 GUI。我知道简单地减少报告数量是一种解决方案,比如只报告十分之一,但就我而言,我真的想获取所有报告并将它们显示在我的 GUI 中。

我的第一个想法是将所有报告排入队列并逐一处理,在每份报告之间稍作停顿。

首先:这是一个好的选择吗?

其次:如何实现?使用计时器还是使用某种Task.Delay()

更新:
我会尽力解释得更好。发送到 GUI 的进度包括我在 map 上显示的地理坐标。一个接一个地显示每个进度在 map 上提供某种动画。这就是为什么我不想跳过其中任何一个。

事实上,我不介意我在另一个线程中执行的方法是否在动画之前完成。我想要的只是确保所有点都至少显示了一定时间(比如 200 毫秒)。

最佳答案

如果这是结果,听起来让进程在单独的线程中运行的全部意义都被浪费了。因此,我的第一个建议是尽可能减少更新次数。

如果这是不可能的,也许您可​​以修改作为每次更新的一部分发送的数据。用于报告的对象或数据结构有多大,有多复杂?能否通过降低复杂性来提高性能?

最后,您可以尝试另一种方法:如果您创建一个第三个​​ 线程来处理报告,并以更大的 block 将其传送到您的 GUI 会怎么样?如果你让你的工作线程向这个报告者线程报告它的状态,那么让报告者线程只偶尔向你的主 GUI 线程报告一次(例如,每 10 个中有 1 个,正如你在上面建议的那样,然后报告 10 个 block 数据),那么您就不会经常调用您的 GUI,但您仍然能够保留处理过程中的所有状态数据,并使其在 GUI 中可用。

我不知道这对您的特定情况有多可行,但可能值得进行一两次试验?

关于c# - 延迟执行的最佳方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33992710/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com