3

我有一个脚本组件,我在其中缓冲所有行,然后进行一些处理,然后我想创建输出行。我尝试访问 PostExecute 中的输出缓冲区对象,但显然这是不可能的?遇到 AddRow() 时出现“未将对象引用设置为对象的实例”错误。有没有办法做到这一点?

 public override void PostExecute()
{
    base.PostExecute();

    //processing

    foreach(ChartValue cv in chartValues)
    {
        Output0Buffer.AddRow();
        Output0Buffer.usedcl = cv.Centerline;
        //etc
    }           
}
4

2 回答 2

3

答案是否定的,你不能这样做,但简单的解决方案:添加 ProcessInput 函数以使用 ProcessInputRow 函数(已经包含的函数)循环遍历每一行并使用 EndOfRowset 知道何时完成,然后你可以做最终处理代码。

public override void Input0_ProcessInput(Input0Buffer Buffer)
{
    base.Input0_ProcessInput(Buffer);

    try
    {
        //loop through each row
        while (Buffer.NextRow())
        {
             Input0_ProcessInputRow(Buffer);
        }

        //when done collecting all rows, do calculations
        if (Buffer.EndOfRowset())
        {
            CalculateResults();
        }
    }
    catch (Exception e)
    {
       //code here
    }
}

public override void Input0_ProcessInputRow(Input0Buffer Row)
{ 
     //gather each row's values and put into List for processing at the end
于 2017-07-28T14:53:30.123 回答
0

感谢凯利的榜样。但就像HB所说的每一行的base.Input0_ProcessInput()电话Input0_ProcessInputRow。在我的情况下Buffer.EndOfRowset()总是错误的。所以我制作了更短的代码:

public override void Input0_ProcessInput(Input0Buffer Buffer)
{
    base.Input0_ProcessInput(Buffer); // operate rows in while loop

     //when done collecting all rows, do calculations
    CalculateResults();
}
于 2018-06-22T05:06:43.867 回答