0

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

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

4

2 に答える 2