gpt4 book ai didi

c# - 编写报告进度的方法

转载 作者:太空狗 更新时间:2023-10-29 21:40:23 25 4
gpt4 key购买 nike

我正在编写一个在库中执行特定操作的类。但是操作很繁琐,我希望能够找出那个类内部方法的进度,以便在WinForms应用程序中使用它来报告进度。

我计划在我的 WinForms 应用程序中的另一个线程上运行我的类,我希望该类与 WinForms 应用程序的关注点分开,并且我不想将它绑定(bind)到除它之外的任何特定内容

在库类中实现进度报告机制的最佳方式是什么?

以某种方式在类中添加一个进度变量,并在我的 WinForms 应用程序中为其添加一个事件监听器是否是个好主意?如果是,我该怎么做?

编辑:我以前使用过BackgroundWorker 类,但我的问题是我不希望我的库类涉及任何多线程操作。所以我不想在库类中调用 ReportProgress,我想(也许)在包含当前进度的类中有一个变量,我希望 UI 线程以某种方式“订阅”到它。不过,我不知道这是否是设计它的好方法。

最佳答案

查看 BackgroundWorker类(class)。它支持跨线程自动编码(marshal)进度报告,并且它具有用于此类支持的非常简单的事件模型。

编辑:考虑到您直接使用 BackgroundWorker 的立场,您可能要做的是创建一个简单的包装器:

// Error checking elided for expository purposes.
public interface IProgressReporter
{
void ReportProgress(int progress, object status);
}

public class BackgroundWorkerProgressReporter : IProgressReporter
{
private BackgroundWorker _worker;
public BackgroundWorkerProgressReporter(BackgroundWorker worker)
{
_worker = worker;
}

public void ReportProgress(int progress, object status)
{
_worker.ReportProgress(progress, status);
}
}

然后,更改要报告进度的类的构造函数(或添加属性)以接受 IProgressReporter。这是一种依赖注入(inject)形式,应该有意义地允许您的对象报告进度,同时避免对线程库的特定依赖。

关于c# - 编写报告进度的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13716345/

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