gpt4 book ai didi

.net - 运行一批进程并报告每个进程的进度

转载 作者:行者123 更新时间:2023-12-03 10:30:06 25 4
gpt4 key购买 nike

我有一个要加密的文件列表。
加密是由外部控制台应用程序进程报告必须解析的进度进行的。
此进度必须异步启动(处理 OutputDataReceived 事件的 Process.BeginOutputReadLine 是我可以从此过程中获得实时进度的唯一方法)。

设想:
对于用户选择加密的每个文件,ViewModel包含此文件信息的实例被添加到 ListBox .用户添加了 100 个文件进行加密。 ViewModel 中的每一个s 有一个 Encrypt命令(我使用 Prism DelegateCommand )应该在用户单击列表项上的加密按钮时触发。

除此之外,用户可以选择点击“全部加密”,即 CompositeCommand 在对每个单独项目调用 Encrypt 命令的父容器中。
列表中的每个项目都有一个进度条指示此单个文件的加密过程,并且父容器中还有一个进度条应该显示整体进度。

我制作了一个包装器,它异步调用该进程并在每次进度更改时触发一个 .NET 事件,VM 处理该事件并更新进度条绑定(bind)到的进度属性,并且此事件也由重置的父容器处理每个进度更改的摘要总体进度条。
这个包装器公开了一个启动底层进程的“EncryptAsync”函数。
每个项目(VM)都有一个包装器,当调用 Encrypt 命令时,它会在包装器上调用此方法,然后创建一个进程等。
所以基本上当用户单击 Encrypt All 时,将启动 100 个进程。

只是为了确保每个文件的加密可能需要 10 分钟甚至更长时间。平均值为一分钟或更短。

现在我的问题是 :

  • 我如何限制同时处理的数量(我必须这样做吗?或者我应该对它们一一加密)?
  • 这是执行此操作的有效方法吗?也许有一个完全不同的更好的方法?
  • 如何确保在 ViewModel 关闭时所有这些进程(驻留在 VM 中的包装器中)都暴露出来(我已尽我所能在加密后内部处理资源(即加密过程本身),但我做了包装器实现 IDisposable ,我不确定在 VM 上实现 IDisposable 是否正确,我错了吗。

  • 任何设计或实际指导/对这个故事样本的引用将不胜感激!

    *处置

    最佳答案

    1. 和 2.
    我强烈建议您查看 How to: Use a Thread Pool (C# and Visual Basic)在 MSDN 上。
    尤其是 ThreadPoolExample 类 - 它可以解决您的问题

    3.
    如果您的意思是“在关闭 View /VM 后继续加密”:在静态类中创建 TreadPool 处理。

    关于.net - 运行一批进程并报告每个进程的进度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7974559/

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