Hi all,
I have been trying to multi-thread RedactionAnnotation.Redact but keep hitting a System.IndexOutOfRangeException: Index was outside the bounds of the array.
exception no matter which way I try to multi-thread. Example code below:
Using threads:
var documents = new[]
{
@"Sample1.pdf",
@"Sample2.pdf"
};
var threads = new List<Thread>();
foreach (var filePath in documents)
{
var thread = new Thread(() =>
{
var document = new Document(filePath);
foreach (var page in document.Pages)
{
for (var i = 0; i <= 10; i++)
{
var annotation = new RedactionAnnotation(page, new Rectangle(i, i, i + 1, i + 1))
{
FillColor = Color.Black, Color = Color.Black, BorderColor = Color.Black
};
page.Annotations.Add(annotation);
annotation.Redact();
}
}
});
thread.Start();
threads.Add(thread);
}
foreach (var thread in threads)
{
thread.Join();
}
Using tasks:
var documents = new[]
{
@"Sample1.pdf",
@"Sample2.pdf"
};
var tasks = new List<Task>();
foreach (var filePath in documents)
{
var task = new Task(() =>
{
var document = new Document(filePath);
foreach (var page in document.Pages)
{
for (var i = 0; i <= 10; i++)
{
var annotation = new RedactionAnnotation(page, new Rectangle(i, i, i + 1, i + 1))
{
FillColor = Color.Black, Color = Color.Black, BorderColor = Color.Black
};
page.Annotations.Add(annotation);
annotation.Redact();
}
}
});
task.Start();
tasks.Add(task);
}
Task.WaitAll(tasks.ToArray());
Attached are the sample pdfs I used.
Thanks!
Pdf_Lock_Documents.zip (634.3 KB)