C# 如何在域模型中从内部服务类通知进度

C# 如何在域模型中从内部服务类通知进度,c#,events,notifications,progress,C#,Events,Notifications,Progress,我的WPF解决方案有一个带有视图和视图模型的GUI,以及一个带有域对象的类库。 应用程序工作流中的一个主要步骤涉及使用许多不同数值计算的相对较长的操作 因此,我有一个带有Execute()方法的ComputationManager类。这个execute方法实例化,比如说,FirstComputation、SecondComputation和ThirdComputation类,并按顺序调用它们的execute()方法。其中一些类实例化了另一个子计算类,其层次结构简化如下 class Computa

我的WPF解决方案有一个带有视图和视图模型的GUI,以及一个带有域对象的类库。 应用程序工作流中的一个主要步骤涉及使用许多不同数值计算的相对较长的操作

因此,我有一个带有
Execute()
方法的
ComputationManager
类。这个execute方法实例化,比如说,
FirstComputation
SecondComputation
ThirdComputation
类,并按顺序调用它们的
execute()
方法。其中一些类实例化了另一个
子计算类,其层次结构简化如下

class ComputationManager {

    public void Execute() {

        var first = new FirstComputation();
        first.Execute();
        var firstresult = first.result;

        var second = new SecondComputation();
        second.Execute();
        ....
    }
}
由于整个操作需要一些时间才能完成,因此进行计算的ViewModel使用
BackgroundWorker
,而
ComputationManager
DoWork
处理程序中实例化

但这还不够,因为我必须以某种方式从
计算
类接收进度,所以我的问题是:

类库中的类如何通知客户机代码其执行活动的进度

我相信倾听事件是一种方法,但我不确定,特别是因为我从未开发过多线程代码,而且最有可能的是,vast.NET框架有一些预打包的方法来实现这一点


谢谢你的阅读

除了PropertyChange事件之外,我看不出有任何理由在这里使用事件

我只想在ComputationManager类中放置一个名为Progress的属性(类型为int-values,从0到100)。此属性将在setter上引发PropertyChange事件。显然,您的ComputationManager将需要实现INotifyPropertyChanged接口

用户界面(可能是进度指示控件,甚至是简单的标签)将绑定到此属性并显示进度


我不知道你的进度指示应该有多详细。例如,您可以在每个子计算完成时更改进度指示。无论如何,它们都是按顺序执行的。

您的提示很好,但是实际运行需要一些时间的活动位于层次结构下的第二或第三级,并且
nthcompulation
类都是私有的。我想要的是
ComputationManager
了解其子任务内部进度的一种方法。我们可以说,内部类将在
ComputationManager
类上“冒泡”它们的进度,然后将引发
BackgroundWorker.ProgressChanged
事件。