Runs the AutoFormsEngine
on demand for dynamic input (file path / LEADDocument
/ RasterImage
).
public void RunParallelPipesOnDemandDynamicObject(
AutoFormsParallelRunItemGetterDynamicObject formsGetter,
object getterUserData,
AutoFormsParallelRunResultDynamicObjectCallback callback,
int pipesCount
)
formsGetter
Callback to get the input.
getterUserData
Optional object to be passed to the getter.
callback
Callback for each input image after processing.
pipesCount
Number of parallel threads used to consume the input data.
using Leadtools;
using Leadtools.Codecs;
using Leadtools.Forms.Common;
using Leadtools.Forms.Auto;
using Leadtools.Document;
using Leadtools.Ocr;
using Leadtools.Forms.Recognition;
using Leadtools.Forms.Processing;
using Leadtools.Barcode;
using Leadtools.Forms;
public void ResultCallbackDynamic4(object item, AutoFormsRunResult result, int itemIndex, object label)
{
if (result == null)
{
Console.WriteLine($"ERROR!!!: Failed to process {label}: [{itemIndex}]");
}
else
{
Console.WriteLine($"Successfully processed {label}: [{itemIndex}]");
foreach (FormPage page in result.FormFields)
{
foreach (FormField field in page)
{
Console.WriteLine($"Process for the field {field.Name} is {field.Result.Status} ");
}
}
}
}
public void ProcessFormsMultiProcessOnDemandDynamicObject(AutoFormsEngine autoEngine, List<string> fileNames, List<string> repositoryNames)
{
int nextItemIndex = -1;
var rng = new Random();
RasterCodecs codecs = new RasterCodecs();
AutoFormsParallelRunItemGetterDynamicObject getter = (ref object inputItem, ref object itemUserData, ref string repositoryName, object getterUserData) =>
{
int index = Interlocked.Increment(ref nextItemIndex);
if (index >= fileNames.Count)
return;
double rand = rng.NextDouble();
if (rand <= 0.33)
{
// Use file path
inputItem = fileNames[index];
}
else if (rand <= 0.66)
{
// use LEADDocument
inputItem = DocumentFactory.LoadFromFile(fileNames[index], new LoadDocumentOptions());
}
else
{
// use RasterImage
lock (codecs)
{
inputItem = codecs.Load(fileNames[index]);
}
}
repositoryName = repositoryNames == null ? null : repositoryNames[index];
};
autoEngine.RunParallelPipesOnDemandDynamicObject(
getter,
null,
ResultCallbackDynamic4,
8
);
codecs.Dispose();
}