我有一个线程,我在其中进行繁重的计算。在上面的线程中,我循环检查新结果。下面的代码显示了我如何检查当前的最佳结果。
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时在上层线程中触发事件?
答案 0 :(得分:1)
您可以使用Progress
实例允许操作根据该操作的进度向外部实体指示该操作的进度。调用者可以指定在进度更新时执行的操作(在这种情况下,将进度写入控制台),然后操作本身可以在计算每个中间值时向对象报告进度。