Callback to get the input object to run the AutoFormsEngine
on.
public delegate void AutoFormsParallelRunItemGetterDynamicObject(
ref object formObject,
ref object itemUserData,
ref string repositoryName,
object getterUserData
)
formObject
The input object.
itemUserData
Optional object associated with the input item.
repositoryName
If the corresponding repository name of item is not null, then AutoFormsParallelRunItemGetterDynamicObject uses it in place of the current value of FullTextSearchRepositoryName.
getterUserData
Optional object that might be passed to the RunParallelPipesOnDemand and then passed to the getter callback.
The input object can be one of these three types:
string
(The file path of a document to process)RasterImage
LEADDocument
If the getterUserData is used, then apply an appropriate syncing method as multiple getters can be called in parallel threads.
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();
}