0

我在 WPF 中写一些东西,我需要在后台(在其他线程上)执行一些计算,这样它就不会影响 UI 的性能。

我有一个 Window 类,我在其中做一些 UI 逻辑,这就是我调用新Calculations()实例的地方。在 Window 中,我还有一个List<CalculationFormulas>(每个 CalculationFormula 都是需要运行的计算)。有时 CalculationFormula 也需要同时运行。当我构造如上所述的 Calculations 对象时,我将列表传递给 Calculations。

在 Calculations 构造函数中,我异步启动一个工作线程以启动列表中的第一个 CalculationFormula,然后在适当的点,该工作线程异步启动列表中的下一个 CalculationFormula,依此类推,直到列表为空(作为 CalculationFormula计算完成后从该列表中删除)。

我的问题:

1) 如何将当前正在运行的计算列表发送回 Window?即使它们都在不同的线程中运行,我是否有可能在计算中有一个属性,比如List<CalculationFormula>我从每个线程更新的 RunningCalculations ......然后只Calculations.RunningCalculations从 Window 调用?

2)如果List<CalculationFormula>我传递给 Calculations 的 最初发生了变化,我如何将新列表传递给 Calculations 以便所有当前正在运行的线程都知道它已经改变。我需要以某种方式触发事件吗?

3) 每次计算完成时,如何确保 Window 知道这一点(以便它可以反映在 UI 中)?我将如何设置一个事件,以便每个线程在它关闭之前(即计算完成时)触发事件?

谢谢

4

1 回答 1

0

这正是BackgroundWorker擅长的事情。您启动 aBackgroundWorker并让它在完成工作时通知您。该文档有一些不错的示例,许多其他站点也有。只需搜索BackgroundWorker,您就会发现大量有用的信息。

于 2013-01-13T07:04:36.483 回答