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