在后台执行计算(线程)

时间:2013-01-13 06:42:01

标签: c# wpf multithreading

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

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

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

我的问题:

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

2)如果我传入计算的List<CalculationFormula>最初更改,我如何将新列表传递给计算,以便所有当前运行的线程都知道它已更改。我是否需要以某种方式触发事件?

3)每次计算完成,我怎样才能确保Window知道这一点(因此可以在UI中反映出来)?我如何设置一个事件,使每个线程在它关闭之前触发事件(即计算结束时)?

谢谢

1 个答案:

答案 0 :(得分:0)

这正是BackgroundWorker擅长的事情。您启动BackgroundWorker并在完成工作后通知您。文档有一些不错的例子,许多其他网站也是如此。只需搜索BackgroundWorker,您就会找到大量有用的信息。

相关问题