从线程获取中间结果

时间:2015-11-04 13:49:45

标签: c# multithreading thread-safety

我有一个线程,我在其中进行繁重的计算。在上面的线程中,我循环检查新结果。下面的代码显示了我如何检查当前的最佳结果。

private class BestFitThreadClass
{
    public double bestError { get; private set; }

    public void calculate()
    {
        //do some heavy calculation
        for (i = 1; i < 100000; i++)
            bestError = i;
    }
}

static void Main()
{
    var myBestFit = new BestFitThreadClass();

    var myBestFitThread = new Thread(myBestFit.calculate);
    myBestFitThread.Start();

    double oldError = double.MaxValue;

    while(myBestFitThread.ThreadState != ThreadState.Stopped)
    {
        if (myBestFit.bestError < oldError)
        {
            oldError = myBestFit.bestError;
            Console.WriteLine(oldError);
        }
        Thread.Sleep(10);
    }
}

这样做我错过了许多中间结果。 有没有办法在每次找到新的bestError时在上层线程中触发事件?

1 个答案:

答案 0 :(得分:1)

您可以使用Progress实例允许操作根据该操作的进度向外部实体指示该操作的进度。调用者可以指定在进度更新时执行的操作(在这种情况下,将进度写入控制台),然后操作本身可以在计算每个中间值时向对象报告进度。