我有一个脚本组件,我在其中缓冲所有行,然后进行一些处理,然后我想创建输出行。我尝试在PostExecute中访问输出缓冲区对象,但显然这是不可能的?当它到达AddRow()时,“对象引用未设置为对象的实例”错误。有没有办法做到这一点?
public override void PostExecute()
{
base.PostExecute();
//processing
foreach(ChartValue cv in chartValues)
{
Output0Buffer.AddRow();
Output0Buffer.usedcl = cv.Centerline;
//etc
}
}
答案 0 :(得分:1)
答案是否定的,你可以做到这一点而不是简单的解决方案:使用ProcessInputRow函数(已包含的函数)添加ProcessInput函数来循环遍历每一行,并使用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
答案 1 :(得分:0)
感谢凯利的例子。但是就像H B所说,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();
}