0

私は現在、アプリケーションがフォルダーからファイルを取得し、バーコードの各画像に到達するプロジェクトに取り組んでいます。バーコードを読み取ると、バーコード以外のすべてのファイルが配列にプッシュされ、そのファイルの配列は、宛先に一意の名前を持つ複数ページの単一の tiff イメージとマージされます。私が行ったすべての作業とその作業ですが、スレッドを使用して高速化したいです。私は次のような機能を持っています-

  1. バーコードに到達するまで画像ファイルを読み取ります。
  2. 宛先フォルダーに一意の名前を付けます
  3. 複数ページの単一の tiff 画像を作成する
  4. 宛先フォラーに保存します。

バーコードを読み取るには、シンプルなバーコード リーダーを使用します。画像にはバーコードが含まれているか、または no.and があり、残りは foreach ループで配列を処理しています。いくつかのコードはここにあります

 foreach (string path in filenames_1)

            {


                    Image bmp = Bitmap.FromFile(path);
                    Bitmap bn = (Bitmap)bmp;
                    readimage(bn);

                    if (s == 1) //If it is Bookmarked Content Found Then s=1 else its s=0
                    {
                        if (z == 0) // i used z coz in my process first file in directory is barcode image so first time have to skip it so i set z=1 at begining and second time it become 0 and process continues
                        {
                            j = 3; continue;
                            MakeUnique("c:\\sachin.tiff");
                            ConvertToMultiPageTiff(fileNames, fnamem);
                            fileNames.Clear();


                        }
                        fileNames.Add(path);
                        j = 1;
                        if (z == 0)
                        {
                            j = 3;

                        }
                        else
                        {

                        }

                    }
                    else
                    {

                        if (j == 1) // j==1 means its regular tiff file wher i make them add to string array
                        {
                            fileNames.Add(path); // string array with files to be made multiple tiff image become single mulipage tiff image
                            j = 1;
                            z = 0;
                        }

                        if (j == 3)
                        {
                            z = 1;
                            j = 1;
                            fileNames.Add(path);
                            MakeUnique("c:\\sachin.tiff");
                            ConvertToMultiPageTiff(fileNames, fnamem); // this function converts all the added files in filearray of single tiff image to multiple page single tiff image
                            fileNames.Clear();


                        }

                        else
                        {

                        }


                    }
                }



        }

        MakeUnique("c:\\sachin.tiff");
        ConvertToMultiPageTiff(fileNames, fnamem);
        fileNames.Clear();
     }
4

1 に答える 1

0

このロジックを試してください

using System;
using System.Collections.Generic;
using System.Linq;
using System.Reflection;
using System.Net;
using System.Collections;
using System.Threading;
namespace ConsoleApplication4
{


    static class Program
    {
        private static ManualResetEvent wh;
        private static int total;
        private static int done;
        private static void Main()
        {

            string[] myfiles = new string[] {"file1", "file2"};
            wh = new ManualResetEvent(false);
            total = myfiles.Length;
            foreach (string myfile in myfiles)
            {
                ThreadPool.QueueUserWorkItem(ProcessImageFile, myfile);
            }
            wh.WaitOne(Timeout.Infinite);

            //wohoo all files are process now, at faster rate;

        }

        private static void ProcessImageFile(object state)
        {
            string file = state as string;

            // process the file here

            Interlocked.Increment(ref done);

            if (done == total)
            {
                wh.Set();
            }

        }
    }

}
于 2012-12-29T03:48:51.517 に答える