C# 如何将进度条用于需要它的项目';s的计算在另一个项目中

C# 如何将进度条用于需要它的项目';s的计算在另一个项目中,c#,winforms,progress-bar,C#,Winforms,Progress Bar,我有两个项目:一个类库和一个winform,所有的计算都在类库中。现在,当用户单击Run botton时,我想为我的一个表单使用一个进度条。我尝试了下面的代码,但在datagridview中加载数据(大约6000或更多)后,进度条立即填满 Winform项目中的代码: private void BtnRun_Click(object sender, EventArgs e) { progressBar1.Maximum = TTools.Depth.Count;

我有两个项目:一个类库和一个winform,所有的计算都在类库中。现在,当用户单击Run botton时,我想为我的一个表单使用一个进度条。我尝试了下面的代码,但在datagridview中加载数据(大约6000或更多)后,进度条立即填满

Winform项目中的代码:

private void BtnRun_Click(object sender, EventArgs e)
    {
        progressBar1.Maximum = TTools.Depth.Count;
        progressBar1.Step = 1;

        foreach (double doub in TLitho.CalcPercent().Item3)
        {
            progressBar1.PerformStep();
        }

        if (TTools.Depth != null)
        {
            dataGridView1.AllowUserToAddRows = false;
            List<double> DolomitePer = TLitho.CalcPercent().Item3;
            List<double> Depth = TTools.Depth;

            var sourceD = new BindingSource
            {
                DataSource = Depth
            };

            for (int i = 0; i < (sourceD.Count); i++)
            {
                dataGridView1.Rows.Add();
                dataGridView1.Rows[i].Cells[0].Value = sourceD[i];
            }
            var sourcePD = new BindingSource
            {
                DataSource = DolomitePer
            };

            for (int i = 0; i < (sourcePD.Count); i++)
            {
                dataGridView1.Rows.Add();
                dataGridView1.Rows[i].Cells[1].Value = sourcePD[i];

            }
        }
    }
private void BtnRun\u单击(对象发送方,事件参数e)
{
progressBar1.最大值=TTools.Depth.Count;
progressBar1.步骤=1;
foreach(TLitho.CalcPercent().Item3中的双doub)
{
progressBar1.PerformStep();
}
如果(TTools.Depth!=null)
{
dataGridView1.AllowUserToAddress=false;
List DOLUTOPER=TLitho.CalcPercent().Item3;
列表深度=TTools.Depth;
var sourceed=newbindingsource
{
数据源=深度
};
对于(int i=0;i<(sourceed.Count);i++)
{
dataGridView1.Rows.Add();
dataGridView1.Rows[i]。单元格[0]。值=源[i];
}
var sourcePD=newbindingsource
{
数据源=每
};
对于(int i=0;i<(sourcePD.Count);i++)
{
dataGridView1.Rows.Add();
dataGridView1.Rows[i].Cells[1].Value=sourcePD[i];
}
}
}
类库项目中的代码:

public static Tuple<List<double>, List<double>, List<double>> CalcPercent()
    {

        for (int j = 0; j < TTools.Depth.Count; j++)
        {

            MinimumIndexQC.Add(80000);
            MinimumIndexQC[j] = lQC[j].IndexOf(lQC[j].Min());
            MinimumIndexCD.Add(80000);
            MinimumIndexCD[j] = lCD[j].IndexOf(lCD[j].Min());
            MinimumIndexQD.Add(80000);
            MinimumIndexQD[j] = lQD[j].IndexOf(lQD[j].Min());

            CDandND.Add(Math.Abs(lCD[j][MinimumIndexCD[j]] - TPorosity.CalculateNDPorosity()[j]));
            QCandND.Add(Math.Abs(lQC[j][MinimumIndexQC[j]] - TPorosity.CalculateNDPorosity()[j]));
            QDandND.Add(Math.Abs(lQD[j][MinimumIndexQD[j]] - TPorosity.CalculateNDPorosity()[j]));
            if (CDandND[j] < QCandND[j] && CDandND[j] < QDandND[j])
            {
                DistanceCD.Add((Math.Abs(TPorosity.BulkDensity[j] + (0.0173 * TPorosity.Neutron[j]) - 2.9162) / Math.Sqrt(Math.Pow(0.0173, 2) + 1))
                    + (Math.Abs(TPorosity.BulkDensity[j] + (0.0173 * TPorosity.Neutron[j]) - 2.7031) / Math.Sqrt(Math.Pow(0.0173, 2) + 1)));
                DolomitePercent.Add((Math.Abs(TPorosity.BulkDensity[j] + (0.0173 * TPorosity.Neutron[j]) - 2.7031) / Math.Sqrt(Math.Pow(0.0173, 2) + 1)) / DistanceCD[j]);
                CalcitePercent.Add((Math.Abs(TPorosity.BulkDensity[j] + (0.0173 * TPorosity.Neutron[j]) - 2.9162) / Math.Sqrt(Math.Pow(0.0173, 2) + 1)) / DistanceCD[j]);
                QuartzPercent.Add(0);
                DistanceQC.Add(0);
                DistanceQD.Add(0);
            }
            else if (QCandND[j] < CDandND[j] && QCandND[j] < QDandND[j])
            {
                DistanceQC.Add((Math.Abs(TPorosity.BulkDensity[j] + (0.0192 * TPorosity.Neutron[j]) - 2.5818) / Math.Sqrt(Math.Pow(0.0192, 2) + 1))
                    + (Math.Abs(TPorosity.BulkDensity[j] + (0.0173 * TPorosity.Neutron[j]) - 2.7031) / Math.Sqrt(Math.Pow(0.0173, 2) + 1)));
                QuartzPercent.Add((Math.Abs(TPorosity.BulkDensity[j] + (0.0173 * TPorosity.Neutron[j]) - 2.7031) / Math.Sqrt(Math.Pow(0.0173, 2) + 1)) / DistanceQC[j]);
                CalcitePercent.Add((Math.Abs(TPorosity.BulkDensity[j] + (0.0192 * TPorosity.Neutron[j]) - 2.5818) / Math.Sqrt(Math.Pow(0.0192, 2) + 1)) / DistanceQC[j]);
                DolomitePercent.Add(0);
                DistanceCD.Add(0);
                DistanceQD.Add(0);

            }
            else if (QDandND[j] < CDandND[j] && QDandND[j] < QCandND[j])
            {
                DistanceQD.Add((Math.Abs(TPorosity.BulkDensity[j] + (0.0192 * TPorosity.Neutron[j]) - 2.5818) / Math.Sqrt(Math.Pow(0.0192, 2) + 1))
                   + (Math.Abs(TPorosity.BulkDensity[j] + (0.0173 * TPorosity.Neutron[j]) - 2.9162) / Math.Sqrt(Math.Pow(0.0173, 2) + 1)));
                QuartzPercent.Add((Math.Abs(TPorosity.BulkDensity[j] + (0.0173 * TPorosity.Neutron[j]) - 2.9162) / Math.Sqrt(Math.Pow(0.0173, 2) + 1)) / DistanceQD[j]);
                DolomitePercent.Add((Math.Abs(TPorosity.BulkDensity[j] + (0.0192 * TPorosity.Neutron[j]) - 2.5818) / Math.Sqrt(Math.Pow(0.0192, 2) + 1)) / DistanceQD[j]);
                CalcitePercent.Add(0);
                DistanceCD.Add(0);
                DistanceQC.Add(0);
            }
            else
            {
                DistanceCD.Add(0);
                DistanceQC.Add(0);
                DistanceQD.Add(0);
                DolomitePercent.Add(0);
                CalcitePercent.Add(0);
                QuartzPercent.Add(0);
            }
            if (DolomitePercent[j]==0 && CalcitePercent[j]==0 && QuartzPercent[j]==0 && TPorosity.BulkDensity[j] < (-0.0173 * TPorosity.Neutron[j]) + 2.9162)
            {
                DolomitePercent[j] = 100;
            }
            if (DolomitePercent[j] == 0 && CalcitePercent[j] == 0 && QuartzPercent[j] == 0 && TPorosity.BulkDensity[j]> 2.5943 * Math.Pow(Math.E, (-0.009 * TPorosity.Neutron[j])))
            {
                QuartzPercent[j] = 100;
            }

          }
        return Tuple.Create(DolomitePercent, CalcitePercent, QuartzPercent);
       }
   }
public静态元组CalcPercent()
{
对于(int j=0;j2.5943*数学功率(数学E,(-0.009*概率中子[j]))
{
四次百分比[j]=100;
}
}
返回Tuple.Create(百分比、百分比、百分比);
}
}
希望有人能帮助我。
谢谢你

一个考虑因素:
CalcPercent()
似乎只做了一些计算。需要多长时间?你说它返回6000多个元素。你真的需要一个进度条吗?这只会减慢整个过程。可能会使用一个选框或另一个模拟等待阶段的图形元素。那么,这些是什么