Я пытаюсь использовать this great project, но так как мне нужно сканировать много изображений, процесс занимает много времени, поэтому я думал о многопоточности.
Однако, поскольку класс, который делает фактическую обработку изображений, использует Static methods
и манипулирует Objects
от ref
. Я не уверен, как это сделать правильно. метод, который я называю из моего основного потока:Вызов статических методов из потока в C#
public static void ScanPage(ref System.Collections.ArrayList CodesRead, Bitmap bmp, int numscans, ScanDirection direction, BarcodeType types)
{
//added only the signature, actual class has over 1000 rows
//inside this function there are calls to other
//static functions that makes some image processing
}
Моего вопрос, если это безопасно использовать использовать эту функцию, как это:
List<string> filePaths = new List<string>();
Parallel.For(0, filePaths.Count, a =>
{
ArrayList al = new ArrayList();
BarcodeImaging.ScanPage(ref al, ...);
});
Я провел часы отладки это, и большинство из время, которое я получил, было правильным, но я столкнулся с несколькими ошибками, которые я сейчас не могу воспроизвести.
EDIT
Я вставил код класса здесь: http://pastebin.com/UeE6qBHx
без анализа самого метода никто не может сказать, является ли он потокобезопасным! – Yahia
Тот факт, что «большой проект» по-прежнему использует устаревший класс «ArrayList», заставляет меня беспокоиться о безопасности потока. –
Если используется глобальная переменная (или переменная, не используемая как параметр или внутри функции), то это нет. –