この素晴らしいプロジェクトを使用しようとしていますが、多くの画像をスキャンする必要があるため、処理に時間がかかるため、マルチスレッド化を考えていました。
ただし、画像の実際の処理を行うクラスを使用Static methods
して操作Objects
しref
ているため、正しく行う方法がよくわかりません。メインスレッドから呼び出すメソッドは次のとおりです。
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